SQL Serverの一般的なテンプレートスクリプト記述されたアーカイブが自動的にバッチでデータを削除します

  ブロガーは、それは確かにdelete文の最も簡単な言葉で開始され、データを削除するには、このスクリプトの開発のためのプロジェクトを書くより多くのアーカイブスクリプトを行って、その後、より多くのいくつかのデータああより大きく、ああ指標として見て、意志しています削除されたデータが遅い見つけて、システムの通常の使用に影響を与えます。アーカイブテーブルがあること、ダースあるいは数十を持っている場合そして、このような場合は、元の文を使用して、テーブルを削除するデータの均一な量で、削除バッチを削除するための文を書き換え、それは、行の数十になる可能性このスクリプトは、非常に大きなスペースで、開発とメンテナンスのコストを増大させ、それがいわゆるバッチロジックをそらす傾向があり、新入社員のアーカイブスクリプトを開発するために、経験の浅い同僚を助長されていません。

  今週場合によっては、単に作業プロセスのブロガー(zhang502219048)は、要約し、自動的にバッチでデータを削除するテンプレートを用意し、テンプレートが固定され、delete文に集中することができ、および削除することができます各バッチは、ステートメントコントロールを削除するデータの量、より便利に、テンプレート変数SQLを組み立てることによって、単独で論理のバッチを書き込むために、各テーブルのコードの重複を避けるため、複雑に簡略化され、バッチがテーブルを削除増加のみ指定されたデータ(DEMO1以下DEMO2に)数行のコードを追加します

  DEMO1:パラメータを指定せずに、表A、表tmp_Delに従ってデータIDに対応する削除しました。

  DEMO2:日付フィールドが期限切れの削除か否かに応じて、データテーブルBに対応するパラメータを持ちます。

  どこ歓迎コメントやブロガーコンサルティングプライベート手紙わからない場合は、以下のスクリプトと手順を参照してください。

- ===== 1つのバッチアーカイブテンプレート====================================== ================= 
- [このテンプレートの内容を変更しない] 
/ *  
内容:
1.アーカイブ文を組み立てる:@sql = @ sql_Part1 + @sql_Del + @ sql_Part2 
2. @parametersパラメータとしてアセンブリ:@parameters = @parameters_Base +カスタムパラメータ
3渡されたパラメータ:情報のステップ印刷する必要がある@strStepInfo 
論理4.アーカイブは@sql_Delは、バッチ中に分散されたのではなく、焦点を当てました。
* / 
DECLARE  @parameters  NVARCHAR最大=  '' @parameters_Base  NVARCHAR最大= N ' @strStepInfoのNVARCHAR(100)' @sql  NVARCHAR最大=  '' sql_Part1 @  NVARCHAR最大= N " 
1、int型のDECLARE @iBatch = - 。バッチ
        @iRowCountのint = -1 -削除された行の数、初期-1、行の数が、後にバッチを取る削除ROWCOUNT @@ 
印刷変換(VARCHAR(50)、GETDATE()、121)+ @strStepInfo 

一方@iRowCount <> 0 
始める
    印刷'' 開始BATCH:'' 
    プリント@iBatch 
    印刷変換(VARCHAR(50)、GETDATE()、 121)
    
    を開始しようとし
        始めるトラン
' @sql_Delのデータ型はnvarchar最大= ' "を-  
  @sql_Delスクリプト自体、その後の書き込みスクリプトで実際の状況に応じてsql_Part2 @  NVARCHAR最大= N     
            SELECT @iRowCount = @@をrowCount 
        トランがコミット   
    してみてくださいエンド
    キャッチ始まる
        ROLLBACKトランの
        印刷」「:メッセージエラー- 」 ' +変換を(VARCHAR、ERROR_LINE())+ '' | '' + ERROR_MESSAGE()は、
    キャッチエンド

    WAITFOR遅延'' 0時00分01秒'' -遅延

    印刷変換(VARCHAR(50)、GETDATE()、121)
    を印刷します" 「エンドBATCH 」"

    。+ = @iBatch 1 @iBatch SELECT 
エンド" 

- ================ DEMO1 2(パラメータなしで文を削除します):アーカイブテーブルA ==================== =================================== 
SELECT  @parameters  =  @parameters_Base  +  「を」  - 増加する必要がある場合カスタムパラメータ、追加、例えば@parameters_Base + = @parameters '@ArchiveDate日時'@sql_Del  =  'が
            トップ(50000)tc_Delを削除し
            、テーブルtc_Del Aから
            tmp_Del CD上= tc_Del.ID参加インナーcd.ID 
' 
SELECTを @sql  =  @ sql_Part1  +  @sql_Del  +  @ sql_Part2 
印刷 @sql 
Execのsp_executesqlを@sql@parameters、N ' 2アーカイブ表A ' 

- ================ DEMO2 3(パラメータを含む文を削除):アーカイブ・テーブルB ================= ====================================== 
SELECT  @parameters  =  @parameters_Base  +  " 、@ArchiveDate日時'   - もし追加追加のカスタムパラメータ、の必要例えば@parameters_Base + = @parameters'、@ArchiveDate日時」@sql_Del  =  ' 
            トップ(50000)を削除し
            、テーブルBから
            日付<@ArchiveDateが
' 
SELECT  @sql  =  @ sql_Part1  + @sql_Del  +  @ sql_Part2 
印刷 @sql 
のexec sp_executesqlをする@sql@parameters、N ' 3アーカイブ表B '@ArchiveDate

 

おすすめ

転載: www.cnblogs.com/zhang502219048/p/11614337.html