程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL Server自界說異常raiserror應用示例

SQL Server自界說異常raiserror應用示例

編輯:MSSQL

SQL Server自界說異常raiserror應用示例。本站提示廣大學習愛好者:(SQL Server自界說異常raiserror應用示例)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server自界說異常raiserror應用示例正文


在應用SQL Server存儲進程或許觸發器時,平日會應用自界說異常來處置一些特別邏輯。例如游標的燒毀,事務的回滾。接上去將會具體的引見SQL Server自界說異常的應用。

應用“raiserror”來拋出自界說異常。以下代碼:在存儲進程中,拋出自界說異常,然後在catch塊中捕捉自界說異常。

IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name='my_sp_test' AND TYPE='P') BEGIN
  DROP PROCEDURE my_sp_test;
END;
GO
create procedure my_sp_test @i int, @outstr varchar(100) out as
begin try
  declare @j int;
  if @i<10 begin
   set @outstr = 'system exception.';
   set @j = 10/0; -- 由於被除數為0,所以這裡將會拋出一個體系的異常
  end
  else begin
   set @j = @i;
   set @outstr = 'customer exception';
   -- 拋出自界說的異常,在最初的catch塊中同一處置異常
   RAISERROR (66666, -- Message id.
      16, -- Severity,
      1 -- State,
      ) ;  
  end;
end try
begin catch 
  if @@ERROR=66666 begin -- 經由過程@@ERROR的值來斷定能否是自界說的異常
    set @outstr = @outstr + '---------------- customer exception';
  end;
  return;
end catch;
go
 


如上代碼,raiserror參數解釋:

(1). Message id : 異常的獨一標識,且這個值會被賦值給SQLServer的體系變量@@Error。自界說異常的Message Id建議應用50000今後的,由於50000之內的會被體系異常占用。
(2). Severity : 異常的級別。 可輸出1—19的數值。1—10之間不會被catch捕捉。19今後長短常嚴重的級別。
(3). State : 假如輸出負值或年夜於255 的值會生成毛病,發生毛病則會中止數據庫的銜接

履行該存儲進程,看看自界說異常能否勝利捕捉:

DECLARE @OUTSTR11 VARCHAR(100);
exec dbo.my_sp_test 12,@OUTSTR11 out
print @OUTSTR11;


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved