SQL Server 2005 и SELECT и UPDATE заблокированы - PullRequest
2 голосов
/ 08 июня 2010

Я хочу выполнить обновление, затем выберите результат.Я не хочу, чтобы что-либо могло обновлять строку, которую я обновляю, до тех пор, пока не произойдет выбор.Как бы я это сделал?

Моя цель - увеличить значение строки и вернуть это увеличенное значение.До сих пор я обнаружил, что у меня возникает проблема, когда обновление (для приращения) сопровождается выбором в ситуации, когда два запроса происходят почти в одно и то же время, когда выборки возвращают одно и то же число.Так что я предполагаю, что происходит что-то вроде update> update> select> select.

Я пропустил пометку это как SQL Server 2005. На самом деле я работаю с Server 2000. Поэтому пункт output не работает (нев этой версии).

BEGIN TRANSACTION
UPDATE Table SET Last=(Last+1) WHERE ID=someid;
SELECT * FROM Table WHERE ID=someid;
COMMIT TRANSACTION

1 Ответ

3 голосов
/ 08 июня 2010
BEGIN TRAN
UPDATE ...
SELECT...
COMMIT 

Должен делать это даже при уровне изоляции транзакции по умолчанию для зафиксированного чтения.

Вы также можете использовать предложение OUTPUT , чтобы получить строку сразу после обновления. Пример этого

UPDATE <YourTable>
   SET ...
OUTPUT INSERTED.*
 WHERE ...
...