TOP の使用による削除行数の制限

TOP 句を使用すると、DELETE ステートメントで削除される行の数を制限できます。DELETE ステートメントで TOP (n) 句を使用した場合、ランダムに選択される n 行に対して削除操作が実行されます。

たとえば、次のステートメントでは、納期が 2002 年 7 月 1 日より早い 20 行を PurchaseOrderDetail テーブルからランダムに選択して削除します。

USE AdventureWorks2008R2;
GO
DELETE TOP (20) 
FROM Purchasing.PurchaseOrderDetail
WHERE DueDate < '20020701';
GO

TOP を使用して、意味のある日時順に行を削除する必要がある場合は、サブセレクト ステートメントに ORDER BY を含めて TOP を使用する必要があります。次のクエリでは、納期が早いものから 10 行を PurchaseOrderDetail テーブルから削除します。10 行だけを確実に削除するために、サブセレクト ステートメントではテーブルの主キーの列 (PurchaseOrderID) を指定しています。サブセレクト ステートメントで非キー列を指定すると、指定した列に重複する値が含まれる場合、10 行以上の行が削除される可能性があります。

USE AdventureWorks2008R2;
GO
DELETE FROM Purchasing.PurchaseOrderDetail
WHERE PurchaseOrderDetailID IN
   (SELECT TOP 10 PurchaseOrderDetailID 
    FROM Purchasing.PurchaseOrderDetail 
    ORDER BY DueDate ASC);
GO