SQL Server 2008 での上位行の効率的な削除
テーブルの先頭から特定の数の行を削除するのは、SQL Server 2008 の一般的なタスクです。データベース管理。このタスクを効率的に実行するには、SQL 構文の複雑さを理解することが重要です。
最近のクエリでは、テーブルから上位 1000 行を削除しようとした結果、すべての行が削除されました。この問題は、使用されたコードが次のとおりであるために発生しました:
delete from [mytab] select top 1000 a1,a2,a3 from [mytab]
問題は、DELETE ステートメントと SELECT ステートメントの分離にあります。このコードでは、行を削除する順序を定義するために不可欠な TOP 演算子の順序基準が指定されていません。
より効率的なアプローチには、Common Table Expression (CTE) または同様のテーブルの使用が含まれます。行の順序付きセットを定義する式:
;WITH CTE AS ( SELECT TOP 1000 * FROM [mytab] ORDER BY a1 ) DELETE FROM CTE
CTE を作成すると、基本的に、a1 で順序付けされた上位 1000 行を含む一時テーブルが作成されます。 カラム。 CTE から削除すると、基になるテーブルに影響を与えることなく、必要な行のみが削除されます。この方法は、不必要なテーブル スキャンを回避し、データの整合性を確保するため、先頭の行を削除するより効率的な方法です。
以上がSQL Server の上位 N 行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。