Share via


キーセット ドリブン カーソル (データベース エンジン)

キーセット ドリブン カーソルの構成要素と行の順序は、カーソルを開いたときに固定されます。キーセット ドリブン カーソルは、キーセットという一意の識別子 (キー) のセットにより制御されます。これらのキーは、結果セットの行を一意に識別する列のセットから構築されます。キーセットは、カーソルを開いた時点で SELECT ステートメントにより限定されたすべての行から取り出したキー値のセットです。キーセット ドリブン カーソルのキーセットは、カーソルを開いたときに tempdb に構築されます。

キーセットではない列のデータ値への変更をカーソル所有者が実行または他のユーザーがコミットした場合、その変更結果は、ユーザーがカーソルをスクロールすると確認できます。カーソルの外部からデータベースにデータが挿入された場合、カーソルを閉じてから再度開かない限り、カーソル内にその変更結果は反映されません。カーソルで ODBC の SQLSetPos 関数などの API 関数を使用して行った挿入は、カーソルの末尾に表示されます。カーソルを開いた後に削除された行をフェッチしようとすると、@@FETCH_STATUS により、行が見つからないことを示すステータスが返されます。キー列に対する更新は、古いキー値を削除してから新しいキー値を挿入したときと同じような動作になります。その更新操作にカーソルを使用しなかった場合、カーソルには新しいキー値は表示されません。その更新が、カーソルで SQLSetPos などの API 関数または Transact-SQL の WHERE CURRENT OF 句を使用して行われ、SELECT ステートメントの FROM 句に JOIN 条件が含まれなかった場合、新しいキー値はカーソルの末尾に表示されます。挿入操作の FROM 句にリモート テーブルが含まれている場合、新しいキー値は表示されません。古いキー値を取得しようとした場合、削除された行をフェッチしようとした場合と同様に、行が見つからないことを示すフェッチ ステータスが返されます。

注意

計算列のインデックスを使用して、リモート テーブルにキーセット ドリブン カーソルを宣言することはできません。リモート テーブルの一意キーを提供するには、別のインデックスを作成します。