対処したい状況は次のとおりです。
値の表:
id int
val varchar(20)
used bit
flag int
WHERE used = 0 AND flag IS NULLの最初の行を見つけて、「flag」に何かを貼り付けたい。これが行われると、他のユーザーはその行を使用できなくなります(フラグがnullではないため)
もちろん、これは簡単です。
UPDATE top (1) mytable
SET flag = someUniqueValue
WHERE used = 0
AND flag IS NULL
私が知りたいのは、2人のユーザーが同じUPDATEを同時に実行している場合にどうなるかということです。明らかに、最初にそこに着きます。
このシナリオのテスト方法がわからないため、自分自身を見つけることができません。
2番目のユーザーは最初のユーザーを上書きしますか?(すぐに、またはロックが解除された後?)
2番目のユーザーがロックアウトされてエラーが発生しますか?(もしそうなら、どうすればエラーを検出できますか?)
どんな助けでもいただければ幸いです。