SQL Server 2000 - обновить строки и вернуть обновленные строки - PullRequest
2 голосов
/ 12 июля 2011

Мне интересно, как переписать следующий сценарий SQL Server 2005/2008 для SQL Server 2000, который еще не имел OUTPUT.

По сути, я хотел бы обновить строки и вернуть обновленные строки без создания взаимоблокировок.

Заранее спасибо!

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

1 Ответ

4 голосов
/ 12 июля 2011

Вы не можете в SQL Server 2000 чисто

Что вы можете сделать, это использовать транзакцию и некоторые подсказки блокировки, чтобы предотвратить состояние гонки. Ваша основная проблема - 2 процесса, обращающиеся к одной и той же строке (строкам), а не тупик. Подробнее см. Состояние гонки очереди процесса SQL Server .

BEGIN TRANSACTION

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

UPDATE TABLE
SET Locked = 1
WHERE Locked = 0

COMMIT TRANSACTION

Я не пробовал этого, но вы также можете попробовать SELECT в триггере UPDATE из INSERTED.

...