2011-07-11 73 views
2

我想知道如何改寫爲SQL Server 2000這沒有OUTPUT尚未以下SQL Server 2005/2008腳本。的SQL Server 2000 - 更新行並返回更新的行

基本上,我想更新行,並不會產生死鎖返回更新的行。

在此先感謝!

UPDATE TABLE 
SET Locked = 1 
OUTPUT INSERTED.* 
WHERE Locked = 0 

回答

4

你不能在SQL Server 2000中乾淨

你可以做的是使用事務和一些鎖提示,以防止競爭條件。你的主要問題是2個進程訪問相同的行,而不是死鎖。請參閱SQL Server Process Queue Race Condition獲取更多信息。

BEGIN TRANSACTION 

SELECT * FROM TABLE WITH (ROWLOCK, READPAST, UPDLOCK) WHERE Locked = 0 

UPDATE TABLE 
SET Locked = 1 
WHERE Locked = 0 

COMMIT TRANSACTION 

我還沒有試過這個,但是你也可以在INSERTED的UPDATE觸發器中嘗試SELECT。

+0

它的工作原理。謝謝。我還添加了原始線程的鏈接以供參考。 http://www.mssqltips.com/tip.asp?tip=1257 – Win