【发布时间】:2021-12-19 07:12:09
【问题描述】:
我们最近被空降到一个新的 ETL 项目,代码非常糟糕。 我手中有一个包含 700 行和各种更新的查询。
我想使用SET XACT_ABORT ON; 对其进行调试,目标是在只有一个事务失败时回滚所有内容。
但我找到了几种在 StackOverflow 上存档的方法,例如 this:
BEGIN TRANSACTION;
BEGIN TRY
-- Multiple sql statements goes here
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
END CATCH
或this:
BEGIN TRY
BEGIN TRANSACTION
-- Multiple sql statements goes here
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT(ERROR_MESSAGE())
ROLLBACK TRANSACTION
END CATCH
这些都没有使用SET XACT_ABORT ON;。
我不明白,SET XACT_ABORT ON 和使用BEGIN TRY BEGIN TRANSACTION 一样吗?
我可以使用吗:
SET XACT_ABORT ON;
-- Multiple sql statements goes here
并摆脱所有:
BEGIN TRANSACTION;
BEGIN TRY
?
另外,我应该使用BEGIN TRANSACTION 然后BEGIN TRY 还是相反?
【问题讨论】:
标签: sql-server tsql try-catch rollback xact-abort