用于插入已删除行的SQL Server查询

时间:2013-02-05 12:47:38

标签: sql-server-2008

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

2 个答案:

答案 0 :(得分:3)

如果TableB符合the target of an OUTPUT clause表格的要求。

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''
')

答案 1 :(得分:3)

一种选择是使用触发器。

CREATE TRIGGER CopyOnDelete
ON A
AFTER DELETE 
AS
    INSERT INTO B
    SELECT * FROM deleted
GO