2016-11-15 5 views
1

私のアプリケーションでは、複数のユーザーが同じ表を読んだり修正したりすることができます。ただし、ある行がユーザーによって変更された場合、他の行はそれ以上使用できなくなるはずです。SQL Server 2008 - ロックされた行を更新しようとすると、エラーを発生させる方法?

私はとのトランザクションを使用しています。分離レベルを参照してください。を読んでください。問題は、ユーザーがテーブル内の行を更新し、別のユーザーが同じ行を更新しようとすると、2番目のトランザクションは最初のトランザクションがROLLBACK/COMMITになるまで待機してから行を更新できます。

私がしたいことは、この状態でエラーを発生させることです.2番目のユーザーはですので、彼はそれほど長く待たなくてもいいです

どうすればいいですか?

問題は、トランザクションがかなり大きく(いくつかの手順が含まれている)、ロックのためにかなりの時間ユーザーをブロックする可能性があるということです。

はありがとう

+0

「READPAST」、「sp_getapplock」または手作業の論理ロック。 –

+0

編集とコメントの@Ivanに感謝します:) – VictorT

答えて

0
2番目のユーザーが自分の取引から彼のクエリをしようとしたときにあなたが NOWAITヒントを使用することができるかもしれない

ユーザー1

BEGIN TRAN 
SELECT * 
FROM someTable 
WHERE blah 

ユーザー2

(first user's transaction still open) 
BEGIN TRAN 
SELECT * 
FROM someTable WITH(NOWAIT) 
WHERE blah 

OracleとPostgresだけが高速ロック取得に失敗したと読んでいます。もしそうなら、上記のヒントは無視されるかもしれません。

+1

それは素晴らしいです - ありがとう;これらのTablHintsは、UPDATE、INSERT、およびDELETEステートメントに対しても機能します。これは私の問題を解決しました! – VictorT

関連する問題