Raiseerror-Throw

دستورات سیستمی RAISERROR و THROW و تابع FORMATMESSAGE و تفاوت آنها

RAISERROR

یک پیام خطا ایجاد می کند و پردازش خطا را برای session آغاز می کند. RAISERROR می تواند یا به یک پیام تعریف شده توسط کاربر که در جدول سیستمی sys.messages (این جدول، جدولی سیستمی (catalog view) شامل یک ردیف برای هر message_id یا language_id از پیام های خطا در سیستم، هم برای پیام های خطای تعریف شده توسط سیستم و هم برای پیام های خطای تعریف شده توسط کاربر میباشد) ذخیره شده است اشاره کند یا یک پیام را به صورت پویا بسازد. در حقیقت RAISEERROR به شما این امکان را می دهد یک پیام خطای تعریف شده توسط کاربر ایجاد کرده و آن را به فراخوان کننده برگردانید. می توانید شماره خطا ، شدت خطا ، حالت ، پیام و پارامترهای اختیاری را مشخص کنید. همچنین می توانید از RAISERROR با گزینه with log استفاده کنید تا پیام خطا را در error log یا application log بنویسید. .پیام به عنوان یک پیام خطای سرور به اپلیکیشن های فراخوان کننده یا به بلوک CATCH مرتبط از ساختار TRY…CATCH بازگردانده می شود. اپلیکیشن های جدید باید به جای آن از THROW استفاده کنند.

از Raiserror می توان در هر نوع Procedure استفاده کرد و می توان از آن برای قطع جریان اجرای بچ و بیرون آمدن از تراکنش اسفاده نمود. برای کنترل خطا داخل پروسیجر و یا function میتوان از RAISERROR یا THROW استفاده کرد تا درصورت وجود خطا، دراجرای برنامه خللی بوجود نیاید و بابت خطای بوجود آمده متن خطایی که خودتان ایجاد کردید را به شما بدهد. به اینصورت میتوانید خطاهای بوجود آمده را کنترل کنید.

فرمت آن از ورژن SQL Server 2014 به بعد به صورت زیر می باشد:

RAISERROR ( { msg_id | msg_str | @local_variable }

    { , severity, state }

    [ , argument [ , …n ] ] )

    [ WITH option [ , …n ] ]

که در آن msg_id شماره خطای تعریف شده توسط کاربر است که توسط پروسیجر sp_addmessage در جدول سیستمی sys.message ذخیره شده است. (باید شماره این نوع خطاهای تعریف شده توس کاربر بزرگتر از 50000 باشد و بطور پیش فرض همان 50000 است). که بجای شماره خطا میتوان از msg_str استفاده کرد. msg_str یک پیام تعریف شده توسط کاربر با قالب بندی مشابه تابع printf در کتابخانه استاندارد C است. پیام خطا حداکثر می تواند 2047 کاراکتر داشته باشد. هنگامی که msg_str مشخص می شود، RAISERROR یک پیغام خطا با شماره خطای 50000 ایجاد می کند. از یکسری پارامترها در msg_str میتوان استفاده کرد: پارامتر flag : کدی که فاصله و توجیه مقدار جایگزین شده را تعیین می کند. پارامتر width: یک عدد صحیح که حداقل عرض را برای فیلدی که مقدار آرگومان در آن قرار می گیرد، تعریف می کند. precision: حداکثر تعداد کاراکترهای گرفته شده از مقدار آرگومان برای مقادیر رشته. مثلا اگر یک رشته دارای پنج کاراکتر و precision آن 3 باشد، فقط از سه کاراکتر اول مقدار رشته استفاده می شود. (h/l)type: با انواع کاراکترهای d، i، o، s، x، x یا u استفاده می شود و مقادیر shortint (h) یا longint (l) ایجاد می کند.

 یا بجای شماره خطا میتوان از local_variable@  استفاده کرد که این یک متغیر از هر نوع داده نویسه معتبری است که شامل رشته ای است که به روشی مشابه msg_str قالب بندی شده است. local_variable@ باید char یا varchar باشد یا به طور ضمنی به این نوع داده ها تبدیل شود.

Severity سطح شدت خطای تعریف شده توسط کاربر مرتبط با این پیام میباشد. هنگام استفاده از msg_id برای بوجودآوردن یک پیام تعریف شده توسط کاربر ایجاد شده با استفاده از sp_addmessage، severity مشخص شده در RAISERROR غالب بر severity مشخص شده در sp_addmessage شده و جایگزین آن می شود. برای severityهای از 19 تا 25، گزینه WITH LOG مورد نیاز است. سطح شدت خطای کمتر از 0 به عنوان 0 تفسیر می شود و بیشتر از 25 به عنوان 25 تفسیر می شود. سطوح شدت از 20 تا 25 خطرناک و بحرانی در نظر گرفته می شود. در صورت مواجهه با این نوع severityها، اتصال کلاینت پس از دریافت پیام قطع می‌شود و خطا در application log و error log ثبت می‌شود. شما میتوانید 1- را برای بازگشت مقدار شدت مرتبط با خطا تعیین کنید. RAISERROR (15600, -1, -1, ‘mysp_CreateCustomer’); 

که نتیجه آن به این صورت بازگشت داده میشود:

Msg 15600, Level 15, State 1, Line 1

An invalid parameter or option was specified for procedure ‘mysp_CreateCustomer’

State یک عدد صحیح از 0 تا 255. مقادیر منفی به طور پیش فرض روی 1 است. مقادیر بزرگتر از 255 نباید استفاده شوند. اگر همان خطای تعریف شده توسط کاربر در چندین مکان مطرح شود، استفاده از یک شماره state منحصر به فرد برای هر مکان می تواند به یافتن اینکه کدام بخش از کد، خطاها را منجر میشود کمک کند.

argument پارامترهای مورد استفاده در جایگزینی برای متغیرهای تعریف شده در msg_str یا پیام مربوط به msg_id میباشد. می‌تواند 0 یا بیشتر پارامتر جایگزینی وجود داشته باشد، اما تعداد کل پارامترهای جایگزینی نمی‌تواند از 20 تجاوز کند. هر پارامتر جایگزینی می‌تواند یک متغیر محلی یا هر یک از این انواع داده باشد: tinyint، smallint، int، char، varchar، nchar، nvarchar، binary ، یا varbinary . هیچ نوع داده دیگری پشتیبانی نمی شود.

option یک گزینه سفارشی برای خطا و می تواند یکی از مقادیر زیر باشد:

1-      LOG : خطا را در error log و application log برای اینستنس انجین دیتابیس Microsoft SQL Server ثبت می کند. خطاهای ثبت شده در error log در حال حاضر به حداکثر 440 بایت محدود شده است. فقط یکی از اعضای role sysadmin یا یک کاربر با مجوزهای ALTER TRACE می تواند WITH LOG را مشخص کند.

2-      NOWAIT: بلافاصله پیام ها را برای کلاینت ارسال می کند.

3-      :SETERROR مقادیر @ERROR و ERROR_NUMBER را بدون توجه به سطح شدت، روی msg_id یا 50000 تنظیم می‌کند.

خطاهای ایجاد شده توسط RAISERROR مانند خطاهای ایجاد شده توسط کد موتور پایگاه داده عمل می کنند. مقادیر مشخص شده توسط RAISERROR توسط توابع سیستم ERROR_LINE، ERROR_MESSAGE، ERROR_NUMBER، ERROR_PROCEDURE، ERROR_SEVERITY، ERROR_STATE و ERROR@@ گزارش می‌شوند. هنگامی که RAISERROR با شدت 11 یا بالاتر در یک بلوک TRY اجرا می شود، کنترل را به بلوک CATCH مربوطه منتقل می کند. اگر RAISERROR اجرا شود، خطا به فراخوان کننده(caller) برگردانده می شود:

  • خارج از محدوده هر بلوک TRY.
  • با severity 10 یا کمتر در بلوک TRY.
  • با severity 20 یا بالاتر که اتصال پایگاه داده را قطع می کند.

بلوک‌های CATCH می‌توانند با استفاده از توابع سیستم مانند ERROR_NUMBER و ERROR_MESSAGE برای بازیابی اطلاعات خطای اصلی، از RAISERROR برای بازگرداندن خطایی که بلوک CATCH را فراخوانی کرده است، استفاده کنند. ERROR@@ به طور پیش‌فرض برای پیام‌هایی با شدت 1 تا 10 روی 0 تنظیم شده است.

هنگامی که msg_id یک پیام تعریف شده توسط کاربر را مشخص می کند که از جدول سیستمی sys.messages در دسترس است، RAISERROR پیام را از ستون message با استفاده از همان قوانینی که در متن پیام تعریف شده توسط کاربر با استفاده از msg_str اعمال می شود، پردازش می کند. متن پیام تعریف شده توسط کاربر می تواند حاوی مشخصات تبدیل باشد و RAISERROR مقادیر آرگومان را در مشخصات تبدیل map می کند. از sp_addmessage برای افزودن پیام های خطای تعریف شده توسط کاربر و sp_dropmessage برای حذف پیام های خطای تعریف شده توسط کاربر استفاده کنید.

RAISERROR می تواند به عنوان جایگزینی برای PRINT برای بازگرداندن پیام ها به calling applicationها استفاده شود. RAISERROR از جایگزینی کاراکتر مشابه عملکرد تابع printf در کتابخانه استاندارد C پشتیبانی می کند، در حالی که دستور Transact-SQL PRINT این کار را نمی کند. دستور PRINT تحت تأثیر بلوک‌های TRY قرار نمی‌گیرد، در حالی که اجرای RAISERROR با شدت 11 تا 19 در بلوک TRY، کنترل را به بلوک CATCH مربوطه منتقل می‌کند. برای استفاده از RAISERROR برای بازگرداندن پیام از یک بلوک TRY بدون فراخوانی بلوک CATCH، شدت 10 یا کمتر را مشخص کنید.

به طور معمول، آرگومان های متوالی جایگزین مشخصات تبدیل متوالی می شوند. آرگومان اول جایگزین مشخصات تبدیل اول می شود، آرگومان دوم جایگزین مشخصات تبدیل دوم می شود و غیره. برای مثال، در عبارت RAISERROR زیر، اولین آرگومان N’number جایگزین اولین مشخصات تبدیل %s می شود. و آرگومان دوم 5 جایگزین مشخصات تبدیل دوم %d می شود.

RAISERROR (N’This is message %s %d.’, — Message text.

           ,10 — Severity,

           ,1 — State,

           N’number’, — First argument.

           ;(5 — Second argument.

— The message text returned is: This is message number 5.

GO

اگر یک ستاره (*) برای width یا precision مشخصات تبدیل مشخص شود، مقداری که برای ایندو استفاده می شود به عنوان یک مقدار آرگومان عدد صحیح مشخص می شود. در این مورد، یک مشخصه تبدیل می تواند حداکثر از سه آرگومان استفاده کند، هر کدام یکی برای width، precision و مقدار جایگزینی.

به عنوان مثال، هر دو عبارت RAISERROR زیر یک رشته را برمی گرداند. یکی مقادیر width و precision را در لیست آرگومان مشخص می کند. دیگری آنها را در مشخصات تبدیل مشخص می کند.

RAISERROR (N'<\<%*.*s>>’, — Message text.

           ,10 — Severity,

           ,1 — State,

           ,7 — First argument used for width.

           ,3 — Second argument used for precision.

           N’abcde’); — Third argument supplies the string.

— The message text returned is: <<    abc>>abc   .

GO

RAISERROR (N'<\<%7.3s>>’, — Message text.

           ,10 — Severity,

           ,1 — State,

           N’abcde’); — First argument supplies the string.

— The message text returned is: <<   abc >>   abc.

GO

چندمثال:

بازگرداندن اطلاعات خطا از یک بلوک CATCH

مثال کد زیر نحوه استفاده از RAISERROR را در یک بلوک TRY برای پرش اجرا به بلوک CATCH مرتبط نشان می دهد. همچنین نحوه استفاده از RAISERROR برای بازگرداندن اطلاعات مربوط به خطای که بلوک CATCH را فراخوانی کرده است را نشان می دهد.

توجه: RAISERROR فقط خطاهایی با حالت از 1 تا 127 ایجاد می کند. از آنجایی که موتور پایگاه داده ممکن است خطاهایی با حالت 0 ایجاد کند، توصیه می کنیم قبل از ارسال آن به عنوان مقدار به پارامتر وضعیت RAISERROR، وضعیت خطای بازگشتی توسط ERROR_STATE را بررسی کنید.

BEGIN TRY

    — RAISERROR with severity 11-19 will cause execution to

    — jump to the CATCH block.

    RAISERROR (‘Error raised in TRY block.’, — Message text.

               ,16 — Severity.

               1 — State.

               ;(

END TRY

BEGIN CATCH

    DECLARE @ErrorMessage NVARCHAR(4000);

    DECLARE @ErrorSeverity INT;

    DECLARE @ErrorState INT;

 

    SELECT

        ,ErrorMessage() = @ERROR_MESSAGE

       ,ErrorSeverity() = @ERROR_SEVERITY

        ;ErrorState() = @ERROR_STATE

 

    — Use RAISERROR inside the CATCH block to return error

    — information about the original error that caused

    — execution to jump to the CATCH block.

    RAISERROR (@ErrorMessage, — Message text.

               ErrorSeverity, — Severity@

               ErrorState — State@

               ;(

END CATCH;

ایجاد یک پیام موقت در sys.messages

مثال زیر نشان می دهد که چگونه می توان یک پیام ذخیره شده در جدول سیستمی sys.messages را بروز داد. این پیام با استفاده از پروسیجر سیستمی sp_addmessage به عنوان شماره پیام 50005 به جدول سیستمی sys.messages اضافه میشود.

EXEC sp_addmessage @msgnum = 50005

              severity = 10@,

             ;'<< msgtext = N'<\<%7.3s@

GO

RAISERROR (50005, — Message id.

           ,10 — Severity,

           ,1 — State,

           N’abcde’); — First argument supplies the string.

— The message text returned is: <<abc>>    abc>>.

GO

;EXEC sp_dropmessage @msgnum = 50005

GO

استفاده از یک local variable برای تهیه متن پیام

مثال کد زیر نحوه استفاده از یک متغیر محلی را برای تهیه متن پیام برای عبارت RAISERROR نشان می دهد.

DECLARE @StringVariable NVARCHAR(50);

SET @StringVariable = N‘<\<%7.3s>>’;

 

RAISERROR (@StringVariable, — Message text.

           10, — Severity,

           1, — State,

           N’abcde’); — First argument supplies the string.

— The message text returned is: <<    abc>>.

GO

پروسیجر xp_logevent: یک پیام تعریف شده توسط کاربر را در log file SQL Server و در log file Windows ثبت می کند. xp_logevent را می توان برای ارسال هشدار بدون ارسال پیام به کلاینت استفاده کرد.

xp_logevent { error_number , ‘message’ } [ , ‘severity’ ]

مثال زیر پیام را با متغیرهای ارسال شده به پیام درwindows event viewer  ثبت می کند.

DECLARE @@TABNAME VARCHAR(30)

    USERNAME VARCHAR(30)@@,

   ;MESSAGE VARCHAR(255)@@,

 

;’SET @@TABNAME = ‘customers’

;'()SET @@USERNAME = USER_NAME

 

SELECT @@MESSAGE = ‘The table ‘ + @@TABNAME + ‘ is not owned by the user

   ‘.’ + @@USERNAME +

 

USE master;

;EXEC xp_logevent 60000, @@MESSAGE, information

THROW

یک واقعه (exception) ایجاد می کند و اجرا را به بلوک CATCH از ساختار TRY…CATCH منتقل می کند. این دستور در ورژن 2012 معرفی شد.

فرمت این دستور از نسخه 2014 به بعد به صورت زیر است:

,THROW [ { error_number | @local_variable }  

        ,{ message | @local_variable }  

        [{ state | @local_variable }    

[ ; ]

Error_number شماره خطا یا همان واقعه می باشد که باید بزرگتر یا مساوی 50000 باشد. message یک رشته یا متغیری است که استثنا را شرح میدهد. State بین 0 تا 255 میباشد که به وضعیت مربوط به message اشاره میکند.

دستور قبل از دستور THROW باید با نقطه ویرگول (;) پایان دهنده عبارت باشد.

اگر ساختار TRY…CATCH در دسترس نباشد، بچ عبارت خاتمه می یابد. شماره خط و پروسیجری جایی که در آن واقعه پدیدار میشود، تنظیم شده است. severity بر روی 16 تنظیم شده است.

اگر دستور THROW بدون پارامتر مشخص شود، باید در یک بلوک CATCH ظاهر شود. این باعث می شود واقعه بوجودآمده، پدیدار شود. هر خطایی که در دستور THROW رخ دهد باعث خاتمه batch دستورات می شود.

% یک کاراکتر رزرو شده در متن پیام یک عبارت THROW است و باید از آن خارج شود. برای برگرداندن % به عنوان بخشی از متن پیام، کاراکتر % را دوبارتکرار کنید، به عنوان مثال “ The increase exceeded 15%% of the original value.”

تفاوتهای بین RAISERROR و THROW:

1-      اگر یک msg_id به RAISERROR ارسال شود، ID باید در sys.messages تعریف شود. اما لازم نیست پارامتر error_number برای THROW در sys.messages تعریف شود.

2-      پارامتر msg_str می تواند شامل سبک های قالب بندی printf باشد. اما پارامتر message در THROW قالب بندی سبک printf را نمی پذیرد.

3-      پارامتر severity شدت خطا یا واقعه را در RAISERROR مشخص می کند. اما در THROW چنین پارامتری وجود ندارد. و همیشه شدت خطا روی 16 تنظیم شده است. با این حال، زمانی که از THROW برای RE-THROW یک واقعه موجود استفاده می شود، severity بر روی سطح شدت آن واقعه تنظیم می شود.

4-      در THROW اگر SET XACT_ABORT روشن باشد، تراکنش‌ها برگردانده می‌شوند.

در کل RAISERROR انعطاف پذیری و کنترل بیشتری بر پیام خطا و منطق کنترل خطا به شما می دهد ، اما همچنین به کد بیشتری نیاز دارد و ممکن است مطابق با استاندارد ANSI SQL نباشد. THROW راهی ساده تر و تمیزتر برای ایجاد یک واقعه (خطا) و انتشار آن به فراخوان کننده می دهد ، اما همچنین محدودیت ها و موانعی در مورد اطلاعات خطا و دامنه استفاده، دارد.

مثال: از THROW برای ایجاد یک واقعه استفاده کنید:

;THROW 51000, ‘The record does not exist.’, 1  

نتیجه:

Msg 51000, Level 16, State 1, Line 1 

 

The record does not exist.

از THROW برای پدیدارکردن کردن مجدد یک واقعه استفاده کنید:

USE tempdb; 

GO 

)CREATE TABLE dbo.TestRethrow 

;(    ID INT PRIMARY KEY 

BEGIN TRY 

    ;INSERT dbo.TestRethrow(ID) VALUES(1)  

—  Force error 2627, Violation of PRIMARY KEY constraint to be raised. 

    ;INSERT dbo.TestRethrow(ID) VALUES(1)  

END TRY 

BEGIN CATCH 

 

    ;’.PRINT ‘In catch block  

    ;THROW  

END CATCH; 

نتیجه:

In catch block.

Msg 2627, Level 14, State 1, Line 1 

Violation of PRIMARY KEY constraint ‘PK__TestReth__3214EC272E3BD7D3’. Cannot insert duplicate key in object ‘dbo.TestRethrow’. 

The statement has been terminated.

FORMATMESSAGE

از FORMATMESSAGE همراه با THROW استفاده کنید:

مثال زیر نحوه استفاده از تابع FORMATMESSAGE با THROW را برای ارسال یک پیام خطای سفارشی نشان می دهد. مثال ابتدا با استفاده از sp_addmessage یک پیام خطای تعریف شده توسط کاربر ایجاد می کند. از آنجایی که دستور THROW به روش RAISERROR اجازه جایگزینی پارامترها را در پارامتر message نمی دهد، تابع FORMATMESSAGE برای ارسال سه مقدار پارامتر مورد انتظار توسط پیام خطای 60000 استفاده می شود.

EXEC sys.sp_addmessage 

    ,msgnum   = 60000@  

    @ ,severity = 16@  

    ,@msgtext  = N’This is a test message with one numeric parameter (%d), one string parameter (%s), and another string parameter ‘(%s)’–(%s) .  

    ;’lang = ‘us_english@,   

GO 

;DECLARE @msg NVARCHAR(2048) = FORMATMESSAGE(60000, 500, N’First string‘, N’second string‘)   

 

;THROW 60000, @msg, 1  

نتیجه:

Msg 60000, Level 16, State 1, Line 2 

This is a test message with one numeric parameter (500), one string 

parameter (First string), and another string parameter (second string).

لازم به ذکر است تابع FORMATMESSAGE یک پیام از یک پیام موجود در sys.messages یا از یک رشته ارائه شده می سازد. عملکرد FORMATMESSAGE شبیه دستور RAISERROR است. مانند عبارت RAISERROR، FORMATMESSAGE ،message را با جایگزینی مقادیر پارامتر ارائه شده به جای متغیرهای نگهدارنده در message ویرایش می کند. با این حال، RAISERROR بلافاصله پیام را چاپ می کند، در حالی که FORMATMESSAGE پیام فرمت شده را برای پردازش بیشتر و بعدی برمی گرداند.

فرمت:

FORMATMESSAGE ( { msg_number | ‘ msg_string ‘ | @msg_variable} , [ param_value [ ,…n ] ] )

FORMATMESSAGE پیام را به زبان فعلی کاربر جستجو می کند. برای پیام‌های سیستم (msg_number <=50000)، اگر نسخه محلی‌سازی شده پیام وجود نداشته باشد، از نسخه زبان سیستم عامل استفاده می‌شود. برای پیام‌های کاربر (msg_number > 50000)، اگر نسخه بومی‌سازی شده پیام وجود نداشته باشد، از نسخه انگلیسی استفاده می‌شود.

مثال زیر از یک پیام تکراری 20009 استفاده می کند که در sys.messages ذخیره شده است، به این صورت که “The article ‘%s’ را نمی توان به انتشار ‘%s‘ اضافه کرد.” FORMATMESSAGE مقادیر First Variable و Second Variable را برای متغیرهای پارامتر جایگزین می کند. رشته به دست آمده، “The article ‘First Variable’ could not be added to the publication ‘Second Variable’.” ، در متغیر محلی var1 @ ذخیره می شود.

;SELECT text FROM sys.messages WHERE message_id = 20009 AND language_id = 1033  

;DECLARE @var1 VARCHAR(200)   

;SELECT @var1 = FORMATMESSAGE(20009, ‘First Variable’, ‘Second Variable’)   

;SELECT @var1  

مثال بعدی:

SELECT FORMATMESSAGE(‘This is the %s and this is the %s.’, ‘first variable’, ‘second variable’) AS Result

نتیجه:

This is the first variable and this is the second variable.

مثالهای گوناگون دیگر:

;SELECT FORMATMESSAGE(‘Signed int %i, %d %i, %d, %+i, %+d, %+i, %+d’, 5, -5, 50, -50, -11, -11, 11, 11)

;SELECT FORMATMESSAGE(‘Signed int with up to 3 leading zeros %03i’, 5)  

;SELECT FORMATMESSAGE(‘Signed int with up to 20 leading zeros %020i’, 5)  

;SELECT FORMATMESSAGE(‘Signed int with leading zero 0 %020i’, -55)  

;SELECT FORMATMESSAGE(‘Bigint %I64d’, 3000000000)

;SELECT FORMATMESSAGE(‘Unsigned int %u, %u’, 50, -50)  

;SELECT FORMATMESSAGE(‘Unsigned octal %o, %o’, 50, -50)  

;SELECT FORMATMESSAGE(‘Unsigned hexadecimal %x, %X, %X, %X, %x’, 11, 11, -11, 50, -50)  

;SELECT FORMATMESSAGE(‘Unsigned octal with prefix: %#o, %#o’, 50, -50)  

;SELECT FORMATMESSAGE(‘Unsigned hexadecimal with prefix: %#x, %#X, %#X, %X, %x’, 11, 11, -11, 50, -50)  

;SELECT FORMATMESSAGE(‘Hello %s!’, ‘TEST’)  

;SELECT FORMATMESSAGE(‘Hello %20s!’, ‘TEST’); 

;SELECT FORMATMESSAGE(‘Hello %-20s!’, ‘TEST’)

پی نوشت:

فرمت سه پروسیجر سیستمی sp_addmessage  و sp_deletemessage و sp_altermessage:

‘sp_addmessage [ @msgnum= ] msg_id , [ @severity= ] severity , [ @msgtext= ] ‘msg   

     زبان– [ ‘language’ ] =lang@ ],]   

     [ , [ @with_log= ] { ‘TRUE’ | ‘FALSE’ } ]  

     [ , [ @replace= ] ‘replace’ ]  

sp_dropmessage

    [ [ @msgnum = ] msgnum ]

    [ , [ @lang = ] N‘lang’ ]

[ ; ]

‘sp_altermessage [ @message_id = ] message_number   ,[ @parameter = ]’write_to_log  

   [‘ parameter_value =’value@],

مثال: اضافه کردن یک پیام سفارشی به جدول sys.messages:

USE master; 

GO 

,EXEC sp_addmessage 50001, 16   

   N’Percentage expects a value between 20 and 100.  

  ;’. Please reexecute with a more appropriate value  

GO 

مثال: پاک نمودن یک پیام ایجاد شده توسط کاربر از جدول sys.messages:

USE master;

GO

;EXEC sp_dropmessage 50001

مثال: این کوئری باعث می شود که پیام 55001 موجود، در windows application log  ثبت شود:

;’EXECUTE sp_altermessage 55001, ‘WITH_LOG’, ‘true

GO

 

برچسب ها: بدون برچسب

نظر بگذارید

آدرس ایمیل شما منتشر نخواهد شد. قسمتهای مورد نیاز علامت گذاری شده اند *