MSSQL - Try Catch Transaction (Отменяем транзакцию с ошибкой корректно)

MS SQL - по необходимости

Ниже приведен пример корректного отмена транзакции при ошибке:

update Params set Value=168 where Param = 'SessionHoursLimit'

PRINT @@TRANCOUNT  
	BEGIN TRY
    BEGIN TRAN  
        PRINT @@TRANCOUNT  
		update Params set Value=167 where Param = 'SessionHoursLimit'
		select 1/0 -- Если закомментировать эту строку то предыдущая строка выполнится
    COMMIT  TRAN 
	END TRY
	BEGIN CATCH
		if @@TRANCOUNT>0
		ROLLBACK TRAN
	END CATCH
PRINT @@TRANCOUNT  

select * from Params


Если закомментировать строку с ошибочным оператором SELECT 1/0 то предшествующая строка будет выполнена и транзакция успешно завершится, если оставить строку SELECT 1/0 то транзакция отменится полностью, и параметр Value останется таким, каким он был установлен в первой строке скрипта до начала транзакции.

Комментировать...

MSSQL Transaction Try Catch TSQL SQL

Правильное выполнение транзакции в MSSQL

MS SQL - по необходимости

Два варианта выполнения транзакции в MSSQL, для которых при возникновении ошибки транзакция отменяется.

Первый вариант:

BEGIN TRY
    BEGIN TRAN
    UPDATE 1
    UPDATE 2 --Ошибка
    UPDATE 3
    COMMIT TRAN
END TRY
BEGIN CATCH
    ROLLBACK TRAN
END CATCH


Второй вариант:
SET XACT_ABORT ON
BEGIN TRAN
UPDATE 1
UPDATE 2 --Ошибка
UPDATE 3
COMMIT TRAN


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

Комментировать...

MSSQL Transaction TSQL