mssql过程异常捕获及处理模板

  1. 临时表部分捕获异常,不进行事务包装

  2. 目标表部门,捕获异常 并进行事务包装
    建议使用 4和5进行过程异常处理

-- 临时表部分异常处理 1 ############################################################
-- 永远不会有2出现 ,控制报错后面语句不执行
set XACT_ABORT on;
exec('truncate table temp01t');
exec('insert into temp01t select 1');
exec('select 1/0 a');
exec('insert into temp01t select 2');
set XACT_ABORT off;

--create table temp01t(id int)
--select * from temp01t

-- 临时表部分异常处理 2 该方法更好,异常则终止抛出,不会继续向下执行 ############################################################
begin TRY
exec('truncate table temp01t');
exec('insert into temp01t select 1');
exec('select 1/0 a');
exec('insert into temp01t select 2');
--set XACT_ABORT off;
end TRY

BEGIN CATCH

-- 如果发生错误,回滚事务
--ROLLBACK TRANSACTION;
-- 输出错误信息
PRINT 'Error occurred: ' + ERROR_MESSAGE();

THROW;

END CATCH;

-- 目标表部分异常与一致性处理 ############################################################

BEGIN TRY
-- 开始事务
BEGIN TRANSACTION;
-- 捕获语句区 ############################################################

--############################################################
-- 提交事务
COMMIT TRANSACTION;

END TRY

BEGIN CATCH

-- 如果发生错误,回滚事务
ROLLBACK TRANSACTION;
-- 输出错误信息
PRINT 'Error occurred: ' + ERROR_MESSAGE();

THROW;

END CATCH;

posted @ 2025-05-11 14:45  自在现实  阅读(15)  评论(0)    收藏  举报