我正在使用SQL Server 2014 Management Studio。我在我的应用程序中添加了一个删除功能,它将删除Table1中的一行。它将首先将该行插入Table2,然后从Table1中删除它。
为了获得Table2的Table1列的重复,我可以这样做:
SELECT * INTO Table2 FROM Table1
但是,有没有办法让Table2自动从Table1中获取所有列?我问的原因是因为Table1将来会添加不同的列,所以不得不手动将其复制到Table2中将是一个烦恼。谢谢!
答案 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;
这样,您就可以知道该特定记录何时被删除。