2016-01-13 67 views
1

我正在使用SQL Server 2014 Management Studio。我在我的应用程序中添加了一个删除功能,它将删除Table1中的一行。它将首先将该行插入到Table2中,然后从Table1中删除它。自动将一个表与另一个表(列)同步

为了得到表1的列表2的重复,我可以这样做:

SELECT * INTO Table2 FROM Table1 

但是,有没有办法有表2自动获得一个恒定的基础上,从表1中的所有列?我问的原因是因为Table1将来会添加不同的列,所以不得不手动将它复制到Table2中会是一个烦恼。谢谢!

+1

你需要触发来做到这一点,检查这一个http://stackoverflow.com/questions/9996643/sql-server-on-delete-trigger,当然你可能需要修改一些代码,但是是你的问题的解决方案 – Veljko89

回答

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; 

这样,您将能够知道特定记录何时被删除。

+0

这是一个时髦的声明的男人,不知道这是可能的 – Veljko89

+0

@ Veljko89现在你呢! :) –

+0

谢谢!我会试试这个。 – RockOn

相关问题