我们最近被空投到一个有很糟糕的代码的新ETL项目中。 我手头拿着一个有700行和各种更新的查询。
我想用 SET XACT_ABORT ON;
调试它,目标是如果只有一个事务失败,就回滚所有内容。
但是我在 StackOverflow 上找到了几种实现方法,比如这个:
BEGIN TRANSACTION;
BEGIN TRY
-- Multiple sql statements goes here
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
END CATCH
or 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
?
说明:本文涉及 IT 技术相关内容。