我寫了多線程應用程序,每一個線程調用SQL Server的過程。我需要保護一排由多個線程得到我想要的每一行把它只能使用一個線程我用這個代碼:我該如何運行一次按時程序?
CREATE PROCEDURE GetRow
@ThreadID int
AS
BEGIN
DECLARE @rowID int;
SELECT TOP (1) @rowID=[ID] FROM [TestTable] WHERE [ThreadID] = 0 (AND some other parameters)
IF @rowID is not NULL
BEGIN
UPDATE TOP (1) [TestTable] SET [CallCount] = [CallCount]+1,[ThreadID] = @ThreadID WHERE [ID] = @rowID
--some other codes
END
END
正如我所說我運行的應用程序,然後我的應用程序創建10個線程和我設置threadid只有一個線程,但我看到一行被超過1個線程調用和約4-5個線程得到一個排..我怎麼能這樣做最好的方式,我解決了這個代碼,我不喜歡有兩個相同的地方在選擇和更新:
CREATE PROCEDURE GetRow
@ThreadID int
AS
BEGIN
DECLARE @rowID int;
UPDATE TOP (1) [TestTable] SET [CallCount] = [CallCount]+1,[ThreadID] = @ThreadID WHERE [ThreadID] = 0 (AND some other parameters)
SELECT TOP (1) @rowID=[ID] FROM [TestTable] WHERE [ThreadID] = @ThreadID (AND some other parameters)
IF @rowID is not NULL
BEGIN
--some other codes
END
END
我如何用頂級代碼做到這一點?我應該先更新,然後選擇像上面的代碼修復它?
你想達到什麼目的?我試圖理解,但我沒有得到它... – jazzytomato
@Thomas Haratyk對不起,我真的試圖解釋它..我不想在多個線程中選擇特殊行..我寫程序更新theardid列行'噸讓其他線程選擇,但在Sametime中其他線程選擇它的.. –