実現したいこと
プロシージャAを実行中はテーブルBにデータが入らないようにしたい
SQL
1 2 3 4CREATE PROCEDURE A 5BEGIN 6 7 insert into A_TBL 8 select 9 * 10 from 11 B_TBL 12 13END
上記のようなプロシージャAがあったとします。
テーブルBのデータを、テーブルAにInsertするプロシージャです。
Excelで呼び出す想定で作りました。
VBA
1 2BeginTrans 3 4 exec A 5 6CommitTrans 7 8
質問
・with(TABLOCKX)の使用方法
・テーブルに対して共有ロックをかける方法
を知りたいです。
上記プロシージャAを実行中にテーブルBのデータが増減してしまうと意図しないデータがテーブルAに挿入されてしまう可能性があります。
これを防ぐべく、テーブルロックを付与してあげる必要があるのかなと考えているのですがその必要はありますでしょうか?
VBA側でトランザクションを切っていれば、「ファントムリードは起こらない」で間違いないか気にしています。
そこで、テーブルAに共有ロックをかけることを検討しておりますが、共有ロックをかける方法は
SQL
1 2 3 4CREATE PROCEDURE A 5BEGIN 6 7 insert into A_TBL 8 select 9 * 10 from 11 B_TBL WITH(TABLOCKX) 12 13END
でいいのでしょうか?
しかし、
実行確認しているとロックがかかっていないように見えてしまって。。。。
下記のようなSQLを実行すると、普通にデータをInsertできてしまいます。
SQL
1 2 select 3 * 4 from 5 B_TBL WITH(TABLOCKX) 6 7 insert into B_TBL value(データ) 8 9END
with(TABLOCKX)の使い方が適切ではないからなのでしょうか?
知恵を貸していただけると嬉しいです。
どうぞよろしくお願いいたします。
補足
環境はSQL Server Management Studio 2008になります
回答1件
あなたの回答
tips
プレビュー