@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

バインド変数を利用したSQLServerの排他ロック

1
投稿者投稿内容
トシ
会議室デビュー日: 2003/12/07
投稿数: 3
投稿日時: 2005-11-16 20:37
いつもお世話になっております。

現在、VB.NETでWindowsアプリケーションを構築してます。
DBはSQLServer2000です。

SelectのSQL文で『with (rowlock, updlock)』を追記し、
排他ロックをかける際、
指定のレコードのみならず、テーブルにある全レコードが
ロック状態となってしまいます。

----------------------------------------------------
Dim command As SqlClient.SqlCommand
Dim reader As IDataReader

'インスタンス・パラメータ設定
(省略)

command.CommandText = "select * from T_Sample with (rowlock, updlock)
where Sample_ID=@Sample_ID"

reader = command.ExecuteReader()

----------------------------------------------------------------

本処理後、SQLServer2000のクエリアナライザで、
『sp_lock』を実行したところ、
1件のみならず、T_Sampleテーブルの全レコード数分、
ロック状態となってしまいます。
(結果:TypeがKEY、ModeがU)

しかし、次のようにバインド変数(@XXX)を適用しない場合では、
対象レコードのみがロック状態となります。
----------------------------------------------------
Dim command As SqlClient.SqlCommand
Dim reader As IDataReader

'インスタンス・パラメータ設定
(省略)

command.CommandText = "select * from T_Sample with (rowlock, updlock)
where Sample_ID=1"

reader = command.ExecuteReader()

----------------------------------------------------------------

"@XXX"を利用した場合でも、対象レコードのみロックをかけたいのですが、
何か方法がありましたら、ご教授いただきたく。

何卒、宜しくお願い致します。

1

スキルアップ/キャリアアップ(JOB@IT)