下面这段代码,RAISERROR之后还是往下执行,除非加上return,否则哪怕再加上SET XACT_ABORT ON都没用。
我觉得RAISERROR之后就应当停止运行了,这才是对的。这算不算TSQL的BUG,还是什么问题?
源码如下:
set XACT_ABORT on
begin tran
begin try
insert into T1 values(3); --主键重复错误
end try
begin catch
if @@trancount > 0
begin
rollback tran
raiserror('kk',15,1);
end
end catch
if @@TRANCOUNT > 0
begin
print 'commit'
commit tran
end
else
begin
print 'rollback'
end
------解决思路----------------------
跳出还是有条件的!
begin try
PRINT 1
raiserror(1,15,1);
PRINT 2
end try
begin catch
PRINT 3
raiserror(1,15,1);--没有上级的CATCH块,不会跳出
PRINT 4
end catch
PRINT 5
BEGIN TRY
begin try
PRINT 11
raiserror(1,15,1);
PRINT 12
end try
begin catch
PRINT 13
raiserror(1,15,1);--有上级的CATCH块,才会跳出
PRINT 14
end catch
PRINT 15
END TRY
BEGIN CATCH
PRINT 16
END CATCH
1
3
消息 2732,级别 16,状态 1,第 12 行
エラー番号 1 は無効です。エラー番号には、13000 から 2147483647 までの値を指定してください。50,000 を指定することはできません。
4
5
11
13
16