- - PR -
バインド変数を利用したSQLServerの排他ロック
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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