2017-08-28 11 views
0

テーブルの切り捨てを実行するために必要な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

挿入に失敗してデータが失われたらどうなりますか?少なくともトランザクションなしで危険だと思われる。私は、監査表を検討する価値があると思います。 –

答えて

0

まず、クエリに基づいてテーブルの内容を変更していません。レコードをAからBに移動してAに戻すだけです。

もっと簡単な方法は、移動をすべてスキップすることです。

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

あなたが本当にレコードを上演しようとしている場合は、少なくともそのInsert Into文のWHERE句をするつもりです。私は本当になぜあなたがこれを行う必要があるか分からない。

関連する問題