自动将一个表与另一个表(列)同步

时间:2016-01-13 14:05:55

标签: sql sql-server

我正在使用SQL Server 2014 Management Studio。我在我的应用程序中添加了一个删除功能,它将删除Table1中的一行。它将首先将该行插入Table2,然后从Table1中删除它。

为了获得Table2的Table1列的重复,我可以这样做:

SELECT * INTO Table2 FROM Table1

但是,有没有办法让Table2自动从Table1中获取所有列?我问的原因是因为Table1将来会添加不同的列,所以不得不手动将其复制到Table2中将是一个烦恼。谢谢!

1 个答案:

答案 0 :(得分:4)

有几种方法可以做到这一点:

  • 您可以使用触发器来捕获DELETE次操作
  • 您可以修改DELETE语句以使用OUTPUT

看起来像这样:

DELETE T1
OUTPUT DELETED.* INTO Table2
FROM Table1 AS T1;

因此,每当您从Table1删除某些内容时,这些记录都会添加到Table2

如果Table2应该是一个存档表,它可能有ArchiveDate列,那么您的语句可能会有所改进,如下所示:

DELETE T1
OUTPUT DELETED.*, CURRENT_TIMESTAMP INTO Table2
FROM Table1 AS T1;

当然我不建议在SQL查询中使用*并仔细列出您的列:

DELETE T1
OUTPUT DELETED.Column1, DELETED.Column2, DELETED.Column3, DELETED.Column4, CURRENT_TIMESTAMP
INTO Table2 (Column1, Column2, Column3, Column4, ArchiveDate)
FROM Table1 AS T1;

这样,您就可以知道该特定记录何时被删除。