ブロガーは、それは確かに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