خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
مدیریت خطاها در SQL Server- استفاده از ساختار TRY – CATCH
در زمان اجرای کوئری ها و اسکریپت ها و همچنین stored procedure ها در SQL سرور ممکن است با خطاهای مختلفی مواجه شوید و مدیریت این خطاها امری مهم برای برنامه نویسان SQL Server می باشد. درست مانند سایر زبان های برنامه نویسی ، SQL Server نیز TRY - CATCH را برای مدیریت خطا و بازگشت پیام خطا دارد. در ادامه کار نمونه ای از استفاده TRY - CATCH برای گرفتن استثناء در SP را مشاهده خواهید کرد.
Syntax کلی استفاده از TRY - CATCH به صورت زیر می باشد:
در این مثال یک stored procedure ایجا دشده که در آن از بلوک TRY - CATCH استفاده شده است. در واقع در این SP، خطا وجود دارد که قرار است با استفاده از بلوک Try-Catch این خطا را بگیریم. CATCH، شماره خطای استثنا و شدت ، وضعیت ، خطی که خطا در آن رخ داده و پیغام خطا را در یک متغیر ذخیره می کند.
خروجی کوئری را در ذیل مشاهده می کنیم.
توجه:
TRY - CATCH هیچ استثنا یا هشداری که با شدت خطای کمتر از 10 باشد را لحاظ نمی کند.
Syntax کلی استفاده از TRY - CATCH به صورت زیر می باشد:
/** Create Stored Procedure **/
DECLARE @Error nvarchar(MAX);
/** More Variable Declarations & Code **/
BEGIN TRY
/** Code which needs to handled for exception. **/
END TRY
BEGIN CATCH
SET @Error = 'Error Number: ' + CAST(ERROR_NUMBER() AS VARCHAR(10)) + '; ' +
'Error Severity: ' + CAST(ERROR_SEVERITY() AS VARCHAR(10)) + '; ' +
'Error State: ' + CAST(ERROR_STATE() AS VARCHAR(10)) + '; ' +
'Error Line: ' + CAST(ERROR_LINE() AS VARCHAR(10)) + '; ' +
'Error Message: ' + ERROR_MESSAGE()
BREAK
END CATCH
/** Any other code **/
در این مثال یک stored procedure ایجا دشده که در آن از بلوک TRY - CATCH استفاده شده است. در واقع در این SP، خطا وجود دارد که قرار است با استفاده از بلوک Try-Catch این خطا را بگیریم. CATCH، شماره خطای استثنا و شدت ، وضعیت ، خطی که خطا در آن رخ داده و پیغام خطا را در یک متغیر ذخیره می کند.
/** Create Stored procedure **/
CREATE PROCEDURE mtb_SampleExceptionHndling
@Error NVARCHAR(MAX) OUTPUT
AS
BEGIN
BEGIN TRY
SELECT 5/0;
END TRY
BEGIN CATCH
SET @Error = 'Error Number: ' + CAST(ERROR_NUMBER() AS VARCHAR(10)) + '; ' + Char(10) +
'Error Severity: ' + CAST(ERROR_SEVERITY() AS VARCHAR(10)) + '; ' + Char(10) +
'Error State: ' + CAST(ERROR_STATE() AS VARCHAR(10)) + '; ' + Char(10) +
'Error Line: ' + CAST(ERROR_LINE() AS VARCHAR(10)) + '; ' + Char(10) +
'Error Message: ' + ERROR_MESSAGE()
END CATCH
END
GO
/** Execute Stored Procedure **/
DECLARE @ErrorMsg NVARCHAR(MAX)
EXEC mtb_SampleExceptionHndling @Error = @ErrorMsg output
Select @ErrorMsg
GO
خروجی کوئری را در ذیل مشاهده می کنیم.
/** Result **/
-----------
(0 rows affected)
-----------
Error Number: 8134;
Error Severity: 16;
Error State: 1;
Error Line: 7;
Error Message: Divide by zero error encountered.
(1 row affected)
توجه:
TRY - CATCH هیچ استثنا یا هشداری که با شدت خطای کمتر از 10 باشد را لحاظ نمی کند.
نمایش دیدگاه ها (0 دیدگاه)
دیدگاه خود را ثبت کنید: