Как мне протестировать sql-запрос, который изменяет данные, т.е. увидеть результат перед фиксацией в sql server 2008?

Я использовал другие инструменты SQL, и некоторые из них позволяют мне видеть результат угрожающего запроса перед его фиксацией. Мне нравится этот двухэтапный процесс (так что я могу дважды проверить, не делаю ли что-то плохое).

Есть ли в SQL Server 2008 R2 способ «выполнить» запрос, просмотреть выходные данные для затронутых строк, а затем принять или выбросить фиксацию?

РЕДАКТИРОВАТЬ:

Я также нашел другой вопрос, задающий то же самое с другим ответом, используя предложение OUTPUT.

Как просмотреть деструктивный запрос SQL?


person psylinse    schedule 12.05.2011    source источник
comment
возможный дубликат Как просмотреть деструктивный запрос SQL?   -  person Jim Dagg    schedule 18.12.2014


Ответы (2)


Да, это возможно. Вы можете использовать параметр сеанса SET IMPLICIT_TRANSACTIONS ON или создать явную транзакцию, как показано ниже.

BEGIN TRAN

UPDATE YourTable 
SET foo=1
 /*To Review Changes can use OUTPUT clause here...*/
OUTPUT INSERTED.*, DELETED.*
WHERE bar=2


/*... or a SELECT against the table*/
SELECT *
FROM YourTable
WHERE bar=2


-- Execute the COMMIT or ROLLBACK commands when ready

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

person Martin Smith    schedule 12.05.2011

BEGIN TRAN TEST
UPDATE TABLE_NAME
SET Col='TEST'

После просмотра результатов вы можете COMMIT или ROLLBACK транзакцию.

ИСПОЛЬЗУЙТЕ SELECT @@TRANCOUNT, чтобы увидеть количество открытых транзакций в вашем текущем соединении.

person garnertb    schedule 12.05.2011