Sql transaction sql server: BEGIN TRANSACTION (Transact-SQL) — SQL Server

транзакций (Transact-SQL) — SQL Server

Редактировать

Твиттер

LinkedIn

Фейсбук

Электронная почта

  • Статья

Применяется к: 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.