#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, если с тех пор вы не запускали другой запрос.
Если вам нужно восстановить удаленные строки, восстановите их из резервной копии. В противном случае найдите программное обеспечение, которое может воспроизвести журнал транзакций. Убедитесь, что журнал транзакций не обрезается программой резервного копирования за это время.