Sql transaction sql server: BEGIN TRANSACTION (Transact-SQL) — SQL Server
Содержание
транзакций (Transact-SQL) — SQL Server
Редактировать
Твиттер
Фейсбук
Электронная почта
- Статья
Применяется к: SQL Server Azure SQL База данных Azure SQL Управляемый экземпляр Azure Synapse Analytics Analytics Platform System (PDW)
Транзакция — это отдельная единица работы. Если транзакция прошла успешно, все изменения данных, сделанные во время транзакции, фиксируются и становятся постоянной частью базы данных. Если транзакция обнаруживает ошибки и должна быть отменена или отменена, все изменения данных стираются.
SQL Server работает в следующих режимах транзакций:
Автофиксация транзакций
Каждый отдельный оператор является транзакцией.
Явные транзакции
Каждая транзакция явно начинается с инструкции BEGIN TRANSACTION и явно завершается с помощью инструкции COMMIT или ROLLBACK.
Неявные транзакции
Новая транзакция неявно запускается после завершения предыдущей транзакции, но каждая транзакция явно завершается оператором COMMIT или ROLLBACK.
Пакетные транзакции
Применимо только к нескольким активным наборам результатов (MARS). Явная или неявная транзакция Transact-SQL, которая начинается в сеансе MARS, становится пакетной транзакцией. Транзакция с областью действия пакета, которая не зафиксирована или не отменена после завершения пакета, автоматически откатывается SQL Server.
Примечание
Особые замечания, связанные с продуктами хранилища данных, см. в разделе Транзакции (Azure Synapse Analytics).
В этом разделе
SQL Server предоставляет следующие операторы транзакций:
НАЧАТЬ РАСПРЕДЕЛЕННУЮ ТРАНЗАКЦИЮ
ОТКАТ ТРАНЗАКЦИИ
НАЧАТЬ ТРАНЗАКЦИЮ
ОБРАТНАЯ РАБОТА
СОВЕРШИТЬ ТРАНЗАКЦИЮ
СОХРАНИТЬ ТРАНЗАКЦИЮ
ЗАВЕРШИТЬ РАБОТУ
См.
также
SET IMPLICIT_TRANSACTIONS (Transact-SQL)
@@TRANCOUNT (Transact-SQL)
tsql — лучший способ работы с транзакциями в MS SQL Server Management Studio
спросил
Изменено
5 месяцев назад
Просмотрено
183 тыс. раз
Допустим, у меня есть оператор SQL, который синтаксически и семантически корректен, поэтому он выполняется.
Как в Management Studio (или любом другом инструменте запросов) протестировать операторы SQL, и если я замечу, что они что-то сломали, откатиться (в отдельном запросе?)
- sql
- tsql
- transaction
Самое простое, что можно сделать, это обернуть ваш код в транзакцию, а затем выполнять каждую партию кода T-SQL построчно.
Например,
Начать транзакцию -Выполните здесь несколько запросов T-SQL. Откатить транзакцию -- ИЛИ зафиксировать транзакцию
Если вы хотите включить обработку ошибок, вы можете сделать это с помощью блока TRY…CATCH. В случае возникновения ошибки вы можете откатить транзакцию в блоке catch.
Например:
ИСПОЛЬЗОВАТЬ AdventureWorks; ИДТИ НАЧАТЬ СДЕЛКУ; НАЧАТЬ ПОПРОБУЙТЕ -- Генерировать ошибку нарушения ограничения. УДАЛИТЬ ИЗ Production.Product ГДЕ ProductID = 980; КОНЕЦ ПОПЫТКИ НАЧАТЬ ЛОВИТЬ ВЫБИРАТЬ ERROR_NUMBER() КАК ErrorNumber ,ERROR_SEVERITY() AS ErrorSeverity ,ERROR_STATE() КАК ErrorState ,ERROR_PROCEDURE() КАК ErrorProcedure ,ERROR_LINE() КАК ErrorLine ,ERROR_MESSAGE() AS ErrorMessage; ЕСЛИ @@TRANCOUNT > 0 ОТКАТ СДЕЛКИ; КОНЦЕВОЙ ЗАХВАТ; ЕСЛИ @@TRANCOUNT > 0 СОВЕРШИТЬ СДЕЛКУ; ИДТИ
Подробнее см. следующую ссылку.
http://msdn.