यदि आप एक कोशिश / कैच ब्लॉक का उपयोग करते हैं, तो 11-19 की गंभीरता के साथ एक किशमिश त्रुटि संख्या को पकड़ ब्लॉक में कूदने के लिए निष्पादन का कारण होगा।
16 से ऊपर की कोई भी गंभीरता एक सिस्टम त्रुटि है। निम्न कोड प्रदर्शित करने के लिए एक कोशिश / कैच ब्लॉक सेट करें और एक संग्रहीत प्रक्रिया निष्पादित करें जो हम मानते हैं कि विफल हो जाएगी:
मान लें कि हमारे पास एक तालिका है [dbo]। [त्रुटियां] त्रुटियां रखने के लिए मान लें कि हमारे पास एक संग्रहीत कार्यविधि है [dbo]। [मान लें कि यह तब होता है जब हम इसे निष्पादित करते हैं।
if (object_id('tempdb..
create table
declare @tc as int;
set @tc = @@trancount;
if (@tc = 0)
begin transaction;
else
save transaction myTransaction;
begin try
declare @return_value = '0';
set @return_value = '0';
declare
@ErrorNumber as int,
@ErrorMessage as varchar(400),
@ErrorSeverity as int,
@ErrorState as int,
@ErrorLine as int,
@ErrorProcedure as varchar(128);
exec @return_value = [dbo].[AssumeThisFails]
if (@return_value <> 0)
raiserror('This is my error message', 17, 1);
if (@tc = 0)
commit transaction;
return(0);
end try
begin catch
select
@ErrorNumber = ERROR_NUMBER(),
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE(),
@ErrorLine = ERROR_LINE(),
@ErrorProcedure = ERROR_PROCEDURE();
insert
values (@ErrorNumber, @ErrorMessage, @ErrorSeverity, @ErrorState, @ErrorLine, @ErrorProcedure);
if (@tc = 0)
begin
if (XACT_STATE() <> 0)
begin
select * from
rollback transaction;
insert into [dbo].[Errors] (ErrorNumber, ErrorMessage, ErrorSeverity, ErrorState, ErrorLine, ErrorProcedure)
select * from
insert [dbo].[Errors] (ErrorNumber, ErrorMessage, ErrorSeverity, ErrorState, ErrorLine, ErrorProcedure)
values (@ErrorNumber, @ErrorMessage, @ErrorSeverity, @ErrorState, @ErrorLine, @ErrorProcedure);
return(1);
end
end
if (XACT_STATE() = 1)
begin
rollback transaction myTransaction;
if (object_id('tempdb..
insert
values (@ErrorNumber, @ErrorMessage, @ErrorSeverity, @ErrorState, @ErrorLine, @ErrorProcedure);
else
raiserror(@ErrorMessage, @ErrorSeverity, @ErrorState);
return(2);
end
else if (XACT_STATE() = -1)
begin
rollback transaction;
if (object_id('tempdb..
insert
values (@ErrorNumber, @ErrorMessage, @ErrorSeverity, @ErrorState, @ErrorLine, @ErrorProcedure);
else
raiserror(@ErrorMessage, @ErrorSeverity, @ErrorState);
return(3);
end
end catch
end
RAISERRORअगर वास्तव में गंभीरता को 16 के बजाय 17 या 18 पर सेट किया गया है, तो बस परीक्षण और वसीयत को समाप्त कर देगा।