SQL Server テーブルに対して一括削除操作を実行しているときに、広範囲にわたる一括削除操作と同様の一括削除操作を実行する方法があるのではないかと疑問に思うことがあります。挿入操作に使用される効率的な一括コピー (bcp) ツール。この疑問は、SQL Server に専用の一括削除機能がないために生じます。
残念ながら、答えは否定的です。 SQL Server は、データを一括削除するための bcp のような直接的なメカニズムを提供しません。 WHERE 句を使用して削除操作の影響を受ける行を制限する場合は、フィルタリングを行わずにテーブル内のすべての行を削除する TRUNCATE コマンドを使用することはできません。
代替アプローチ
一括削除ユーティリティがない場合は、別の方法がいくつかあります。 take:
バッチ削除:
テーブルSwap:
例:
-- Batched Deletes SELECT 'Starting' --sets @@ROWCOUNT WHILE @@ROWCOUNT <> 0 DELETE TOP (1000) MyTable WHERE ... -- Table Swap SELECT col1, col2, ... INTO #Holdingtable FROM MyTable WHERE ..opposite condition.. TRUNCATE TABLE MyTable INSERT MyTable (col1, col2, ...) SELECT col1, col2, ... FROM #Holdingtable
これらの代替アプローチでは、専用の一括削除機能と同じパフォーマンスが常に提供されるわけではないことに注意してください。ただし、WHERE 句の使用が必要な場合には、大規模な削除操作に実行可能なオプションが提供されます。
以上がSQL Server 2008 は bcp と同様の一括削除機能を提供しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。