SQL Server 2000 - 更新行并返回更新的行

时间:2011-07-11 22:48:11

标签: sql sql-server sql-server-2000

我想知道如何为没有OUTPUT的SQL Server 2000重写以下SQL Server 2005/2008脚本。

基本上,我想更新行并返回更新的行而不会产生死锁。

提前致谢!

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

1 个答案:

答案 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。