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;