0

将删除的数据从一个表移动到另一个表的最佳方法是什么?假设两个表具有相同的列定义?

EmpTable
EmpID(PK, identity) EmpName(nvarchar(max)) Picture(varbinary(max)) 

DeletedEmpTable
DeletedEmpID(PK, identity) EmpID(int) EmpName(nvarchar(max)) Picture(varbinary(max)) 
4

1 回答 1

2

如果表不参与外键、有触发器、有标识列、计算列等,您可以使用OUTPUT子句执行以下操作:

DELETE dbo.Table1
OUTPUT deleted.* 
INTO dbo.Table2
WHERE ...

您可以通过编写更具创造性的条款来解决其中的一些限制OUTPUT,但不是全部。如果您有任何限制阻止使用该OUTPUT子句,您可以使用INSTEAD OF触发器来执行这两个操作。

CREATE TRIGGER dbo.TriggerOnTable1
  ON dbo.Table1
  INSTEAD OF DELETE
AS
BEGIN
  SET NOCOUNT ON;

  INSERT dbo.Table2(cols) SELECT cols FROM deleted;

  DELETE t FROM dbo.Table1 AS t
    INNER JOIN deleted AS d
    ON t.key_column = d.key_column;
END
GO

INSTEAD OF与常规后触发器相比,很多人质疑触发器的价值。我喜欢他们的是,如果您有任何可能导致您取消删除的验证要执行,您可以取消删除而不是允许它发生然后回滚。

于 2013-09-02T02:11:20.533 回答