2008-09-05 27 views
1

私の仕事は、複数のユーザーが同時にオン働くことができることを、SQLVB.NETで記述された財務アプリケーションを、持っています。いくつかの時点で プロセスを実行中に特定のSQL行をロックするにはどうすればよいですか?

、1ユーザーが(そしておそらく他の人)が現在取り組んでいるエントリのバッチを投稿することを決定するかもしれません。

もちろん、私はもはや、を追加に他のユーザーを望んでいない編集、またはそのバッチで開始されたポストプロセスをエントリを削除します。

私はすでにすべてのデータをロックすることができますが、ポストプロセスの開始時にSQLトランザクションを開くとプロセスがかなり長くなり、機能を完了するのにかかるかもしれない。

私はVB.NETコードからの操作する必要が知っているレコードだけをロックする方法はありますか?

答えて

0

with (rowlock) 

SQL Server Performance article

SQLクエリにEDITを追加: OK、私は質問を誤解しました。あなたが望むのは、トランザクションの分離です。 +1 to Joel :)

2

Oracleを使用している場合は、を選択して、ロックする行のを選択します。ここ

はおそらく、むしろ特定のテーブル上で(ROWLOCK)でを使用するよりも全体のトランザクションの分離レベルを設定する例

SELECT address1 , city, country 
FROM location 
FOR UPDATE; 
1

です。

このページを見てみましょう。具体的に
http://msdn.microsoft.com/en-us/library/ms173763.aspx

、「行ロック」のそれ内の検索、そして私はあなたがそのREAD COMMITTEDまたはREPEATABLE READが何をしたいです見つけると思います。 READ COMMITTEDはSQL Serverのデフォルトです。 READ COMMITTEDが十分に強く見えない場合は、REPEATABLE READに進みます。

更新:あなたのフォローアップ記事の1つを読んだら、繰り返し読めるようにしてください。これは、トランザクションをコミットまたはロールバックするまでロックを保持します。

0

することを選択し

例ではHOLDLOCK + UPDLOCKを使用TRANでラップ

begin tran 
select * from 
SomeTable (holdlock,updlock) 
where .... 


processing here 

commit 
関連する問題