SQL Server创建表变量来保存将截断永久表后将插入到永久表中的记录

SQL Server创建表变量来保存将截断永久表后将插入到永久表中的记录

问题描述:

我有一个约700万行的表,我需要执行截断的表。我会这样做,如下所示:SQL Server创建表变量来保存将截断永久表后将插入到永久表中的记录

BEGIN TRY 

BEGIN TRANSACTION 

Declare @RecsToKeep Table 
(
    Id int 
) 
SELECT Id 
     FROM RealTable 
    Where CONVERT (DATE, CreatedDate) > '2017-08-16' 


Declare @KeepTheseRecs Table 
(
    Id int 
) 

Insert into @KeepTheseRecs 
    Select * 
    From RealTable Where Id IN (Select Id From @RecsToKeep) 

Truncate Table RealTable 

Insert into RealTable 
Select * 
    From @KeepTheseRecs 

COMMIT 
END TRY 
BEGIN CATCH 
    ROLLBACK 
END CATCH 

真正的表和表变量具有相同的列结构。这是做到这一点的正确方法吗?

+0

如果插入失败并且丢失数据会发生什么情况?至少没有交易似乎是危险的。我认为审计表值得考虑。 –

首先,您没有根据查询改变表中的任何内容。您只需将记录从A移动到B并返回到A.

更简单的方法是将所有移动都放在一起。

delete from RealTable 
where someColumn = 'someValue' --or what ever condition you want 

如果你真的要上演的记录,你会至少要对Insert Into语句WHERE条款。我真的不明白你为什么需要这样做。