当前位置: 代码迷 >> Sql Server >> 奇怪的RAISERROR有关问题
  详细解决方案

奇怪的RAISERROR有关问题

热度:97   发布时间:2016-04-24 09:59:55.0
奇怪的RAISERROR问题
下面这段代码,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