競合状態になる可能性があります。
1 つのステートメントで実行できます:
- UPDATE で割り当てることができます
- ロック ヒントにより、別のプロセスがスキップできるようになります この行
- OUTPUT 句は呼び出し元にデータを返します
これを試してください... (編集:ホールドロックが削除されました)
Update TOP (1) ServerLoginUsers WITH (ROWLOCK, READPAST) OUTPUT INSERTED.* SET AssignedTo = @User, AssignedToDate = getdate(), SourcePool = @UserPool WHERE AssignedTo is null and [TsServer] = @Server -- not needed -> and UserName = @ServerUser
プレ>そうでない場合は、別の選択が必要になる場合があります
Update TOP (1) ServerLoginUsers WITH (ROWLOCK, READPAST) SET -- yes, assign in an update @ServerUser = UserName, -- write AssignedTo = @User, AssignedToDate = getdate(), SourcePool = @UserPool OUTPUT INSERTED.* WHERE AssignedTo is null and [TsServer] = @Server -- not needed -> and UserName = @ServerUser SELECT ...
プレ>詳細については、こちらを参照してください:SQL Server プロセス キューの競合状態