我有一個存儲過程,SELECT
是表中的TOP 1
記錄,並將某些變量與列的值進行賦值。然後SELECT
s 10記錄Id
列的值與TOP 1
變量列的值相同。需要鎖定協助
SELECT TOP 1 @Id = [Id]
FROM [TableA]
ORDER
BY [DateCreated], [Priority]
SELECT TOP 10 *
FROM [TableA]
WHERE [Id] = @Id;
目的是SELECT
一個記錄,然後讓10條集的記錄進行處理。這適用於如果一個連接正在調用存儲過程。我有一個應用程序是多線程的,這會導致一個問題,因爲如果第一個和第二個記錄是相同的Id
,我希望它們在一個結果集中,以便第二個線程將選擇一個不同的結果集值。這是我遇到問題的地方。我試着在第一個SELECT
聲明中使用HOLDLOCK, UPDLOCK, ROWLOCK
提示,但是它鎖定了第一條記錄,並允許另一個線程在第一條線程中獲取我想要的下一個值。我也在存儲過程中啓動了一個TRANSACTION
,並將ISOLATION LEVEL
更改爲READ COMMITTED
,但第二個線程總是進入並取得下一個值,然後第一個線程可以匹配Id
匹配的10個記錄。
有沒有人有任何想法我應該如何去做呢?這種方法可行嗎?
可能重複的[SQL Server進程隊列爭用條件](http://stackoverflow.com/questions/939831/sql -server-process-queue-race-condition) – gbn
什麼ORDER BY應該適用於查詢?完整的代碼是什麼樣的?桌子是什麼樣的? – gbn