結果セット内の行の削除

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 AdventureWorks2008R2;
GO
DECLARE complex_cursor CURSOR FOR
    SELECT a.BusinessEntityID
    FROM HumanResources.EmployeePayHistory AS a
    WHERE RateChangeDate <> 
         (SELECT MAX(RateChangeDate)
          FROM HumanResources.EmployeePayHistory AS b
          WHERE a.BusinessEntityID = b.BusinessEntityID) ;
OPEN complex_cursor;
FETCH FROM complex_cursor;
DELETE FROM HumanResources.EmployeePayHistory
WHERE CURRENT OF complex_cursor;
CLOSE complex_cursor;
DEALLOCATE complex_cursor;
GO