SQLserver创建自定义异常及raiserror使用方法

--使用系统视图sys.messages查看系统中定义的错误
language_id =2052 china language_id =1033  english SELECT * FROM sys.messages WHERE message_id =66666

--1.创建自定义错误消息 添加到系统消息
EXEC sp_addmessage @msgnum = 66666,  --错误号
              @severity = 16,   --严重级别
              @msgtext ='procedure error;this is custom exception',
           --   @lang = 'us_english',  --语言版本
              @with_log= 'TRUE',     --记入日志,也可以在实际产生错误时指定是否记入日志
              @replace = 'replace'   --替换已经存在的错误号
              
go

--language_id =2052 china language_id =1033  english 
--  SELECT TOP 100 * FROM sys.messages WHERE message_id =66666
EXEC sp_addmessage @msgnum = 66666, 
  @severity = 16, 
  @msgtext ='procedure error;this is custom exception',
  @lang = 'us_english', 
  @with_log= 'FALSE',  
  @replace = 'replace'  

参考 如何在sqlserver 的函数或存储过程中抛出异常。 - 三小 - 博客园

使用方法

/*==============================================================================
// 存储过程: procedure_name
//------------------------------------------------------------------------------
// 描述: 
//	
//------------------------------------------------------------------------------
// 参数:
	
//------------------------------------------------------------------------------
// 返回值:  @code nvarchar(100) -返回是否成功  -1错误 , 0失败 ,1成功
//------------------------------------------------------------------------------
// 作者 	     日期:  
//------------------------------------------------------------------------------
// 修改历史: 
//	 commit tran一航放到最后
//------------------------------------------------------------------------------
//==============================================================================*/
CREATE PROCEDURE dbo.C_SP_TESTTRAN
    @result int output, --成功 1; 失败 0
    @message nvarchar(100) output
AS
BEGIN
    SET NOCOUNT ON
     
begin try 
      --设置事物回滚机制,xact_abort为 on,回滚整个事务
      set xact_abort on 
      begin tran yy 
        DECLARE @res INT
        DECLARE @msg nvarchar(500),@outstr nvarchar(500)
        SET @res = 0
        SET @msg = ''

        
        
        IF OBJECT_ID('tempdb..#temp') IS NOT NULL 
			DROP TABLE #temp 
	    
        IF @msg = '' 
        BEGIN
          --执行语句
			
			
	   SET @res =@@ROWCOUNT
           SET @msg = 'OK'
        end

        IF @res < 0
   	BEGIN
            SET @msg = '自定义异常'
     	    RAISERROR (66666, 16, 1);
    	END
 
        --- 最后输出结果
        SELECT @msg AS msg , @res AS code 
       
       end try   
begin catch
    IF @@ERROR = 66666
      SET @outstr = @msg
    ELSE
      SET @outstr = ERROR_MESSAGE()
    if @@trancount>0
           rollback tran  yy;

    --- 最后输出结果
    SELECT @outstr AS res_msg

  END CATCH
       if @@trancount>0
            commit tran  yy;
        
    SET NOCOUNT OFF;  
     
     
END
 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值