2011-04-26 5 views
4

В SQL Server 2008 R2. Можно ли выполнить откат одной команды обновления?Как отменить команду SQL update?

Я знаю, что есть другие вопросы, подобные этому на SO, но я не видел одного конкретного для 2008 R2, и, следовательно, я могу получить тот же ответ, если это так, то мы можем закрыть эту тему.

Я сделал простое обновление без каких-либо операций команды:

UPDATE myTable SET col1=somevalue WHERE.... 

ответ

6

Конечно, вы можете использовать явные транзакции, такие как

BEGIN TRAN 
UPDATE ... 
ROLLBACK 

, но я не думаю, что вы спрашиваете об этом?

Если у вас есть опция SET IMPLICIT_TRANSACTIONS ON, тогда команда не будет зафиксирована или откатна до тех пор, пока вы не сделаете это явно, но это не поведение по умолчанию.

По умолчанию транзакции автоматически фиксируются, поэтому, когда команда завершается успешно, результаты обновления будут зафиксированы. Если в обновлении возникла ошибка - в том числе при соединении, которое было убито в середине обновления, он автоматически откат.

1

Если ваша база данных находится в полном режиме восстановления, возможно, вы захотите попробовать прочитать журнал транзакций, найти, какие строки были затронуты, а затем вернуть обновление.

Однако это не поддерживается по умолчанию, поскольку MS хранит журнал транзакций в своем собственном формате, который плохо документирован.

Решение должно использовать такие команды, как DBCC LOG или fn_log или сторонний инструмент, такой как ApexSQL Log, который делает все это автоматически, но поставляется с ценой.

Если вам нужно больше информации, вот несколько сообщений о журнале транзакций чтения:

Read the log file (*.LDF) in sql server 2008

SQL Server Transaction Log Explorer/Analyzer

Смежные вопросы