Восстановить удаленные строки в предложении OUTPUT

#sql #sql-server-2012 #output #recover

#sql #sql-server-2012 #вывод #восстановление

Вопрос:

Я выполнил следующий запрос в SSMS без записи результата в табличную переменную. Есть ли какой-либо способ получить удаленную строку, используя временную созданную УДАЛЕННУЮ таблицу? Я не закрыл сеанс SQL. Я нахожусь в том же сеансе, где я выполнил следующий запрос.

 delete from [AdventureWorksDW2014].[dbo].[FactCallCenter]
output deleted.*
where FactCallCenterID = 119
 

Комментарии:

1. Захватил ли SSMS выведенные строки в свою таблицу результатов (обратите внимание, что поток текстовых результатов может отображаться, учитывая, что это запрос на удаление. Если вы видите «10000 затронутых строк», нажмите Ctrl-D, чтобы переключиться на просмотр сетки данных)? Здесь нет ВЫВОДА, поэтому эти строки не были помещены ни во что, о чем знает SQLServer

2. Если у вас открыто окно результатов, вы можете скопировать эти данные во что-то и превратить их в инструкции DDL и DML, в противном случае нет, они исчезли. Вам потребуется RESTORE база данных до точки, предшествующей DELETE .

3. Кай — Да, я смог увидеть результат в сетке.

4. Ларну — Да, окно открыто. Можете ли вы дать мне SQL для копирования данных, как вы сказали?

Ответ №1:

Нет, результирующий OUTPUT набор извне INTO отправляется прямо клиенту, как и любой другой SELECT . Таким образом, вы должны иметь возможность видеть в SSMS, если с тех пор вы не запускали другой запрос.

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