2

データベースからコードを選択しようとしていますが、別の人が来て同じコードを選択する必要はありません。私は updlock のみを使用してみましたが、これで重複した販売の問題は解決しましたが、デッドロックの問題が追加されました。だから今私は (UPDLOCK, READPAST) を使用しています。ステートメント内で ORDER BY を使用しようとするまで、これは完全に正常に機能します。

マイクロソフト SQL 2005

BEGIN TRANSACTION

SELECT Top 10 ID FROM dbo.CODES 
with (UPDLOCK, READPAST)
where ItemNo = 'type-2' AND Sold = 0 
order by cast(NowStamp as DateTime) ASC

COMMIT TRANSACTION

私の問題はインデックスから来ているように感じます。

4

1 に答える 1

1

これは、 ORDER BY および WITH(ROWLOCK, UPDLOCK, READPAST) と非常によく似た問題です。

答えは、ROWLOCK とインデックスも必要であることを示しています。残念ながら、CAST のために非決定論的と見なされるため、その列にインデックスを作成することはできません ( http://msdn.microsoft.com/en-us/library/ms189292(v=sql. 90).aspx ).

CONVERT を使用し、http://msdn.microsoft.com/en-us/library/ms187928(v=sql.90).aspx から確定的なスタイルを指定する必要があります

于 2013-07-24T22:05:38.407 に答える