說我有如下表:選擇並更新表,所以沒有線程的重疊
ID|Read
-------
1|true
2|false
3|false
4|false
...我需要閱讀的最小ID,有[閱讀] ==虛假;另外,更新我現在已經閱讀它。
因此,如果我執行我的存儲過程dbo.getMinID,它將返回ID:2,並更新[Read] - > true。
CREATE PROCEDURE [dbo].[getMinID]
(
@QueryID INT OUTPUT
)
BEGIN
SELECT TOP 1 @QueryID = [ID] from Table
UPDATE Table SET [Read] = 1 WHERE [ID] = @QueryID
END
的問題是,我有十(10)異步線程執行dbo.getMinID,在同一時間,我不能有選擇它們在任何情況下相同的[ID]。我擔心我的SELECT和UPDATE語句之間執行第二個線程,因此在兩種情況下返回[ID]:2。
無論有多少線程在存儲過程中執行操作,我如何確保不會選擇/更新同一個記錄兩次?另外,請記住,表CONSTANTLY添加了新的行,所以我不能鎖定表!
min,不會觸發所有行上的鎖?或者我只是說廢話 – 2010-01-21 13:11:33
共享鎖是隻讀的,並且由於READPAST它將跳過其他鎖。沒關係,真的... – gbn 2010-01-21 13:52:21