Как отменить запрос SQL Server UPDATE? - PullRequest
22 голосов
/ 14 января 2011

В SQL Server Management Studio я выполнил следующий запрос.
К сожалению, я забыл раскомментировать предложение WHERE.
1647 строк были обновлены вместо 4.

Как мне отменить последнее утверждение?

К сожалению, я только что закончил перевод этих 1647 строк и делал окончательные исправления , поэтому у меня нет резервной копии .

UPDATE [dbo].[T_Language]
   SET 
       [LANG_DE] = 'Mietvertrag' --<LANG_DE, varchar(255),>
      ,[LANG_FR] = 'Contrat de bail' -- <LANG_FR, varchar(255),>
      ,[LANG_IT] = 'Contratto di locazione' -- <LANG_IT, varchar(255),>      
      ,[LANG_EN] = 'Tenancy agreement' -- <LANG_EN, varchar(255),>
       --WHERE [LANG_DE] like 'Mietvertrag'

Есть протокол транзакций, по крайней мере, я на это надеюсь.

Ответы [ 5 ]

12 голосов
/ 14 января 2011

Неподтвержденная транзакция может быть отменена с помощью команды ROLLBACK

Но если вы работаете в режиме автоматической фиксации, вы ничего не можете сделать ....

8 голосов
/ 31 декабря 2016

Если у вас уже есть полная резервная копия из базы данных, к счастью, у вас есть опция в SQL Management Studio. В этом случае вы можете использовать следующие шаги:

  1. Щелкните правой кнопкой мыши базу данных -> Задачи -> Восстановить -> База данных.

  2. На вкладке «Общие» нажмите «Временная шкала» -> выберите параметр «Определенная дата и время».

  3. Переместите ползунок временной шкалы до времени команды обновления -> нажмите ОК.

  4. В качестве имени базы данных назначения введите новое имя.

  5. На вкладке Файлы установите флажок Перераспределить все файлы в папку, а затем выберите новый путь для сохранения восстановленной базы данных.

  6. На вкладке параметров установите флажок «Перезаписать ...» и снимите флажок «Взять хвостовой журнал ...».

  7. Наконец, нажмите OK и дождитесь окончания процесса восстановления.

Я сам использовал этот метод в оперативной базе данных, и он был очень полезен.

5 голосов
/ 17 апреля 2013

Учитывая, что у вас уже есть полная резервная копия, я просто восстановлю эту резервную копию в отдельную базу данных и перенесу данные оттуда.

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

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

Возможно, вы захотите попробовать использовать функции DBCC LOG, функции fn_log или сторонние программы чтения журналов, такие как ApexSQL Log

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

0 голосов
/ 10 июля 2019

Если вы можете поймать это вовремя, и у вас нет возможности ROLLBACK или использовать журнал транзакций, вы можете немедленно сделать резервную копию и использовать инструмент, подобный Redgate SQL Data Compare , чтобы сгенерировать скрипт для «восстановления» затронутых данных. Это сработало как обаяние для меня. :)

0 голосов
/ 14 января 2011

Поскольку у вас есть ПОЛНАЯ резервная копия, вы можете восстановить ее на другом сервере в виде базы данных с тем же именем или на тот же сервер с другим именем.

Затем вы можете просто просмотреть содержимое предварительно-обновите и напишите SQL-скрипт для обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...