結果セット内の行の削除
ADO、OLE DB、および ODBC の各 API では、結果セット内でアプリケーションが位置する現在行の削除がサポートされます。アプリケーションによってステートメントが実行され、結果セットから行がフェッチされます。行がフェッチされた後、次の関数やメソッドを使用して行が削除されます。
ADO アプリケーションの場合、Recordset オブジェクトの Delete メソッドを使用します。
OLE DB アプリケーションの場合、IRowsetChange インターフェイスの DeleteRows メソッドを使用します。
ODBC アプリケーションの場合、SQL_DELETE オプションを指定して SQLSetPos 関数を使用します。
DB-library アプリケーションの場合、dbcursor を使用して CRS_DELETE 操作を実行します。
Transact-SQL スクリプト、ストアド プロシージャ、およびトリガでは、DELETE ステートメントで WHERE CURRENT OF 句を使用して、現在の位置のカーソル行を削除します。次の例では、complex_cursor という名前のカーソルを使用して、EmployeePayHistory テーブルから 1 行が削除されます。DELETE は、カーソルから現在フェッチされる 1 行だけに影響します。
USE AdventureWorks;
GO
DECLARE complex_cursor CURSOR FOR
SELECT a.EmployeeID
FROM HumanResources.EmployeePayHistory AS a
WHERE RateChangeDate <>
(SELECT MAX(RateChangeDate)
FROM HumanResources.EmployeePayHistory AS b
WHERE a.EmployeeID = b.EmployeeID) ;
OPEN complex_cursor;
FETCH FROM complex_cursor;
DELETE FROM HumanResources.EmployeePayHistory
WHERE CURRENT OF complex_cursor;
CLOSE complex_cursor;
DEALLOCATE complex_cursor;
GO