Share via


カーソルの使用によるデータの変更

ADO、OLE DB、および ODBC の各 API では、結果セット内でアプリケーションが位置付けられた現在の行の更新がサポートされます。次の手順は、基本的なプロセスを示しています。

  1. プログラム変数に結果セットの列をバインドします。

  2. クエリを実行します。

  3. 結果セット内の行にアプリケーションを位置付けるために API 関数またはメソッドを呼び出します。

  4. バインドしたプログラム変数に、更新する列の新しいデータ値を設定します。

  5. 次の関数またはメソッドのいずれかを呼び出して、行を挿入します。

    • ADO の場合は、Recordset オブジェクトの Update メソッドを呼び出します。

    • OLE DB の場合は、IRowsetChange インターフェイスの SetData メソッドを呼び出します。

    • ODBC の場合は、SQL_UPDATE オプションを指定して SQLSetPos 関数を呼び出します。

Transact-SQL サーバー カーソルを使用する際には、WHERE CURRENT OF 句を含んだ UPDATE ステートメントを使用して、現在の行を更新できます。この句を使用して行われる変更は、カーソルが位置付けられた行にしか適用されません。テーブルを結合して作成されたカーソルの場合は、UPDATE ステートメントで指定した table_name のみが変更されます。この場合、カーソルに関連する他のテーブルには影響ありません。

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;
UPDATE HumanResources.EmployeePayHistory
SET PayFrequency = 2 
WHERE CURRENT OF complex_cursor;
CLOSE complex_cursor;
DEALLOCATE complex_cursor;
GO

結合の詳細については、「結合の基礎」を参照してください。