PKは主キーですか?それなら、これは問題ではありません。主キーをすでに知っている場合は、スポーツはありません。 pkがの場合 主キーの場合、これは明らかな質問をどのように要求します。 デキューするアイテムのpkを知っていますか...
問題は、しない場合です。 主キーを知っていて、次の「使用可能」(つまり、status =y)をデキューし、デキュー済みとしてマークします(削除するか、status =zを設定します)。
これを行う適切な方法は、単一のステートメントを使用することです。残念ながら、構文はOracleとSQLServerで異なります。 SQLServerの構文は次のとおりです。
update top (1) [<table>]
set status = z
output DELETED.*
where status = y;
私は、SQLのOUTPUT句に似た例を示すために、OracleのRETURNING句に精通していません。
他のSQLServerソリューションでは、SELECTのロックヒント(UPDLOCKを使用)が正しい必要があります。Oracleでは、推奨される方法はFOR UPDATEを使用することですが、FOR UPDATEはSQLのカーソルと組み合わせて使用されるため、SQLServerでは機能しません。 。
いずれにせよ、元の投稿での動作は正しくありません。複数のセッションがすべて同じ行を選択し、すべてがそれを更新して、同じデキューされたアイテムを複数のリーダーに返すことができます。