T-SQL删除插入的记录
-
12-11-2019 - |
题
我知道标题可能看起来很奇怪,但这就是我想做的:
- 我有很多记录的表。
我想获取其中一些记录并将它们插入到其他表中。像这样的东西:
INSERT INTO TableNew SELECT * FROM TableOld WHERE ...
棘手的部分是我希望我插入的这些行也从原始表中删除。
有没有一种简单的方法可以做到这一点,因为我唯一想到的就是使用临时表来保存选定的记录,然后将它们放入第二个表中并从第一个表中删除与它们匹配的行。这是一个解决方案,但是有这么多记录(超过 300 万条半),我正在寻找其他想法......
解决方案
2005年以上使用 OUTPUT
像这样的子句:
DELETE FROM TableOld
OUTPUT DELETED.* INTO TableNew
WHERE YourCondition
它将在单个事务中执行,并且同时完成或回滚
其他提示
您可以使用插入...输出子句存储临时表中复制行的ID。然后,您可以基于临时表从原始表中删除行。
declare @Table1 table (id int, name varchar(50))
declare @Table2 table (id int, name varchar(50))
insert @Table1 (id,name)
select 1, 'Mitt'
union all select 2, 'Newt'
union all select 3, 'Rick'
union all select 4, 'Ron'
declare @copied table (id int)
insert @Table2
(id, name)
output inserted.id
into @copied
select id
, name
from @Table1
where name <> 'Mitt'
delete @Table1
where id in
(
select id
from @copied
)
select *
from @Table1
.
你应该做这样的事情:
INSERT INTO "table1" ("column1", "column2", ...)
SELECT "column3", "column4", ...
FROM "table2"
WHERE ...
DELETE FROM "table1"
WHERE ...
. 不隶属于 StackOverflow