sql server中raiserror的用法(动态参数传值)

1、raiserrror定义: 返回用户定义的错误信息并设系统标志,记录发生错误。通过使用 RAISERROR 语句,客户端可以从 sysmessages 表中检索条目,

或者使用用户指定的严重度和状态信息动态地生成一条消息。这条消息在定义后就作为服务器错误信息返回给客户端。

2、raiserrror语法

RAISERROR msg_id | msg_str } { , severity , state }

3、raiserrror用法

--不带动态参数返回错误信息
 raiserror('参数有误,入库数量不能为0',16,1)

----带动态参数返回错误信息
 raiserror('参数%s[%d]有误,%s',16,1,'@Num2',@Num2,@msg)

4、简单例子

1)创建一个加减乘除算法的存储过程

/***********************
**功能:进行加减乘除计算
**参数:@Num1(参数1)、@Num2(参数2)
        @opeType(计算类型)、@num3(返回结果)
***************************/
create procedure pro_CalculateNum
   @Num1 int,
   @Num2 int,
   @opeType int,
   @num3 decimal output
as
begin
    declare @msg varchar(50)
    --进行加法运算
    if @opeType=1
    begin
        set @num3 = @Num1+@Num2;
        --打印结果
        print @num3;     
    end
     --进行减法运算
    if @opeType=2
    begin
        set @num3 = @Num1-@Num2;
        --打印结果
        print @num3;     
    end
     --进行乘法运算
    if @opeType=3
    begin
        set @num3 = @Num1*@Num2; 
        --打印结果
        print @num3;     
    end
     --进行除法运算
    if @opeType=4
    begin
        if @Num2=0
        begin
             set @msg='进行除法,遇到以零作除数错误';
             --抛出自定义错误信息
             raiserror('参数%s[%d]有误,%s',16,1,'@Num2',@Num2,@msg)
        end
        else
        begin
           set @num3 = @Num1/@Num2;         
            --打印结果
            print @num3;
        end       
    end
     --进行取模%运算
    if @opeType=5
    begin
        if @Num2=0
        begin
             set @msg='进行取模,遇到以零作除数错误';
             --抛出自定义错误信息
             raiserror('参数%s[%d]有误,%s',16,1,'@Num2',@Num2,@msg)
        end
        else
        begin
             set @num3 = @Num1%@Num2;  
             --打印结果
             print @num3;  
        end        
    end
end;

2)进行存储过程调用(除数为0时,我们把错误重新自定义了)

--调用存储过程(除数为0)--
declare @result decimal
exec pro_CalculateNum 12,0,4,@result output 

调用结果

3)进行存储过程调用(除数不为0)

--调用存储过程(除数不为0)--
declare @result decimal
exec pro_CalculateNum 12,3,4,@result output 

调用结果

5、raiserrror符号

详细介绍,请参考网址:

https://www.bbsmax.com/A/A2dmVpmqze/

原文地址:https://www.cnblogs.com/xielong/p/11384709.html