レコードごと/ForEachRecord データブロックで確認する。
BEGIN TRAN SET TRANSACTION ISOLATION LEVEL SERIALIZABLE DECLARE _dm_cur1 CURSOR LOCAL STATIC FOR SELECT [F_text] FROM [Table1] WHERE [Table1].[ID] = 1 --ORDER BY [ID] ASC OPEN _dm_cur1 CLOSE _dm_cur1 DEALLOCATE _dm_cur1 SET TRANSACTION ISOLATION LEVEL READ COMMITTED --- ここまで実行して確認 ROLLBACK TRANこんな感じのものをSSMSで実行しながら確認。データ マクロがストアド プロシージャに変換されたものを簡略化した。
これらの状態でどのようなロックがされるか。
- t0
テーブル全体でレコードの追加/編集/削除ができない - t1
[ID]が1または3または5のレコードの編集削除ができない - t2
[ID]が5から10の範囲のレコードは編集削除ができない。また、新規レコードの[ID]が範囲に含まれる場合追加ができない。
フィールド[F_text]にはインデックスが用いられている。そこに、
SELECT
[F_text]
FROM
[Query1]
WHERE [Query1].[F_text] = N'115'
という内容でロックがかかるものとして、フィールド[F_text]を"115"として編集や追加をすることはできない。と同時に、"111"や"116"でも編集/追加することができない。キー範囲ロックということなのだろうと憶えておく。そのうちもう少し確かめてみよう。
0 件のコメント:
コメントを投稿