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;