0

将表“A”中删除的行插入另一个表“B”的 SQL 查询是什么?

4

2 回答 2

3

如果TableB满足作为子句目标的OUTPUT表的要求。

DELETE FROM TableA 
OUTPUT deleted.* INTO TableB 
WHERE Foo='Bar'

以下限制适用于外部 INSERT 语句的目标:

  • 目标不能是远程表、视图或公用表表达式。

  • 目标不能有 FOREIGN KEY 约束,也不能被 FOREIGN KEY 约束引用。

  • 无法在目标上定义触发器。

  • 目标不能参与事务复制的合并复制或可更新订阅。

如果它不满足这些要求,解决方法是

INSERT INTO TableB
EXEC('
DELETE FROM TableA 
OUTPUT DELETED.*
WHERE Foo=''Bar''
')
于 2013-02-05T12:49:31.897 回答
3

一种选择是使用触发器。

CREATE TRIGGER CopyOnDelete
ON A
AFTER DELETE 
AS
    INSERT INTO B
    SELECT * FROM deleted
GO
于 2013-02-05T12:51:40.243 回答