ある特定のカーソルのトランザクション ロック動作は、そのカーソルの同時実行設定のロック動作、そのカーソルの SELECT に指定されたロック ヒント、およびトランザクション分離レベル オプションを組み合わせて決められます。
Microsoft SQL Server 2005 でサポートされるカーソルのトランザクション分離レベルを次に示します。
READ COMMITTED
SQL Server は、カーソルに行を読み取っている間は共有ロックを獲得しますが、行を読み取った直後にそのロックを解放します。共有ロック要求は排他ロックによってブロックされるため、カーソルは、他のタスクによって更新されていてもまだコミットされていない行については読み取ることができません。READ COMMITTED は、SQL Server と ODBC の両方に設定される既定の分離レベルです。
READ UNCOMMIITTED
SQL Server は、行をカーソルに読み取っている間はロックを要求せず、排他ロックも使用しません。カーソルには既に更新されていてもまだコミットされていない値を設定できます。ユーザーは、SQL Server 2005 のすべてのトランザクション ロック制御メカニズムをバイパスします。
REPEATABLE READ または SERIALIZABLE
SQL Server 2005 は、READ COMMITTED の場合と同様、行をカーソルに読み取るときに各行の共有ロックを要求します。ただし、カーソルがトランザクション内で開かれている場合、共有ロックは、行の読み取り後に解放されるのではなく、トランザクションが終了するまで保持されます。そのため、SELECT ステートメントで HOLDLOCK を指定するのと同じ効果が得られます。
Snapshot
SQL Server は、行をカーソルに読み取っている間はロックを要求せず、排他ロックも使用しません。カーソルには、トランザクションが開始された時点の値が設定されます。スクロール ロックは、スナップショット分離を使用しているかどうかに関係なく、引き続き要求されます。
参照
概念
トランザクション分離レベルのカスタマイズ
トランザクション分離レベルの調整
カーソルの同時実行 (データベース エンジン)