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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM