我想知道如何为没有OUTPUT
的SQL Server 2000重写以下SQL Server 2005/2008脚本。
基本上,我想更新行并返回更新的行而不会产生死锁。
提前致谢!
UPDATE TABLE
SET Locked = 1
OUTPUT INSERTED.*
WHERE Locked = 0
答案 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。