Инструкцията SQL RAISERROR се използва за изпращане на персонализирано съобщение до клиентското приложение. Може също да се използва за отстраняване на грешки в приложението и се прилага към механизма за обработка на грешки.
Синтаксис и параметри на изявление за SQL RAISERROR
Синтаксисът на SQL израза RAISERROR е следният:
RAISERROR ( { message_text | message_id | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ]
[ WITH option [ ,...n ] ];
По-долу можете да видите обяснението на параметрите на ключовата дума RAISERROR, които можете да посочите:
текст_съобщение – съобщението, което искате да изведете за грешка. Забележка: Можем да добавим персонализирани съобщения, за да покажем информацията за грешката. Вижте го обяснено във втория раздел на статията.
идентификатор_съобщение – идентификаторът на съобщението за грешка. Ако искате да покажете дефинираното от потребителя съобщение, трябва да го дефинирате. Вижте списъка с message_ids в sys.messages DMV .
Запитване
select * from sys.messages
Изходът:
тежест – сериозността на грешката. Типът данни на тежостта променлива емалък и стойностите са между 0 и 25. Валидни стойности за сериозност на грешката са както следва:
- 0-10 – информационни съобщения
- 11-18 – грешки
- 19-25 – фатални грешки
Забележка : Ако създадете дефинирано от потребителя съобщение, сериозността, посочена в дефинираното от потребителя съобщение, ще бъде отменена от сериозността, посочена в израза RAISERROR.
състояние – уникалният идентификационен номер, който можете да използвате, за да идентифицирате кодовата секция, която причинява грешката. Типът данни на параметъра на състоянието емалък и стойностите са между 0 и 255.
Сега да преминем към практическите примери.
Пример 1:Използвайте SQL Server RAISERROR изявление за отпечатване на изхода
В този пример можете да видите как можем да покажем съобщението за грешка или информация с помощта на оператора RAISERROR.
Да предположим, че искате да покажете съобщението след вмъкване на записи в таблицата. Можем да използваме SQL оператори PRINT или RAISERROR. Следва кодът:
SET nocount ON
INSERT INTO tblpatients
(patient_id,
patient_name,
address,
city)
VALUES ('OPD00006',
'Nimesh Upadhyay',
'AB-14, Ratnedeep Flats',
'Mehsana')
RAISERROR ( 'Patient detail added successfully',1,1)
Изходът:
Както можете да видите на изображението по-горе, идентификационният номер на съобщението е 50000, тъй като е съобщение, дефинирано от потребителя.
Пример 2:Инструкция за SQL RAISERROR с текста на динамичното съобщение
Сега вижте как можем да създадем динамичния текст на съобщението за оператора SQL RAISERROR.
Да предположим, че искаме да отпечатаме идентификатора на пациента в съобщението. Дефинирах локалната променлива с име @PatientID , който съдържа patent_id . За да се покаже стойността на @patientID променлива в текста на съобщението, можем да използваме следния код:
DECLARE @PatientID VARCHAR(15)
DECLARE @message NVARCHAR(max)
SET @PatientID='OPD00007'
SET @message ='Patient detail added successfully. The OPDID is %s'
INSERT INTO tblpatients
(patient_id,
patient_name,
address,
city)
VALUES ('' + @PatientID + '',
'Nimesh Upadhyay',
'AB-14, Ratnedeep Flats',
'Mehsana')
RAISERROR ( @message,1,1,@patientID)
Изходът:
За да покажем низа в израза RAISERROR, трябва да използваме операторите за печат в стил C.
Както можете да видите на изображението по-горе, до показване на параметъра в текста на съобщението, използвах опцията %s който показва стойността на низа на параметъра . Ако искате да покажете целочисления параметър , можете да използвате опцията %d .
Използвайте SQL RAISERROR в TRY..CATCH Block
В този пример добавяме SQL RAISERROR в блока TRY. Когато изпълним този код, той се изпълнява към свързания блок CATCH. В блока CATCH ще покажем подробностите за извиканата грешка.
BEGIN try
RAISERROR ('Error invoked in the TRY code block.',16,1 );
END try
BEGIN catch
DECLARE @ErrorMsg NVARCHAR(4000);
DECLARE @ErrSeverity INT;
DECLARE @ErrState INT;
SELECT @ErrorMsg = Error_message(),
@ErrSeverity = Error_severity(),
@ErrState = Error_state();
RAISERROR (@ErrorMsg,
@ErrSeverity,
@ErrState
);
END catch;
По този начин добавихме израза RAISERROR с тежкост между 11-19. Това предизвиква изпълнението на блока CATCH.
В блока CATCH показваме информацията за оригиналната грешка, използвайки израза RAISERROR.
Изходът:
Както можете да видите, кодът е върнал информацията за първоначалната грешка.
Сега нека разберем как можем да добавим персонализирано съобщение с помощта на sp_addmessage съхранена процедура.
sp_addmessage Съхранена процедура
Можем да добавим персонализираното съобщение, като изпълним sp_addmessages съхранена процедура. Синтаксисът е:
EXEC Sp_addmessage
@msgnum= 70001,
@severity=16,
@msgtext='Please enter the numeric value',
@lang=NULL,
@with_log='TRUE',
@replace='Replace';
@msgnum: Посочете номера на съобщението. Типът данни на параметъра е цяло число. Това е идентификатор на съобщението за дефинираното от потребителя съобщение.
@тежест: Посочете нивото на сериозност на грешката. Валидните стойности са между 1 и 25. Типът данни на параметъра е smallint.
@messagetext: Посочете съобщението, което искате да покажете. Типът данни на параметъра е nvarchar(255), и стойността по подразбиране е NULL.
@lang: Посочете езика, който искате да използвате за показване на съобщението за грешка. Стойността по подразбиране е NULL.
@with_log: Този параметър се използва за написване на съобщението до зрителя на събития. Валидни стойности са TRUE и FALSE. Ако посочите TRUE, съобщението за грешка ще бъде написано в програмата за преглед на събития на Windows. Ако изберете FALSE, грешката няма да бъде записана в регистъра за грешки на Windows.
@замяна: Ако искате да замените съществуващото съобщение за грешка с дефинирано от потребителя съобщение и ниво на сериозност, можете да посочите замяната в съхранената процедура.
Да предположим, че искате да създадете съобщение за грешка, което връща невалидно качество грешка. В оператора INSERT стойността на количество_продукт е между 20 и 100. Съобщението трябва да се третира като грешка, а сериозността е 16.
За да създадете съобщението, изпълнете следната заявка:
USE master;
go
EXEC Sp_addmessage
70001,
16,
N'Product Quantity must be between 20 and 100.';
go
След като съобщението е добавено, изпълнете заявката по-долу, за да го видите:
USE master
go
SELECT * FROM sys.messages WHERE message_id = 70001
Изходът:
Как да използвате дефинирани от потребителя съобщения за грешки
Както споменах по-рано, трябва да използваме message_id в израза RAISERROR за дефинираните от потребителя съобщения.
Създадохме съобщение с идентификатор 70001. Инструкцията RAISERROR трябва да бъде както следва:
USE master
go
RAISERROR (70001,16,1 );
go
Изходът:
Инструкцията RAISERROR върна дефинираното от потребителя съобщение.
sp_dropmessage Съхранена процедура
sp_dropmessage Съхранената процедура се използва за изтриване на дефинирани от потребителя съобщения. Синтаксисът е следният:
EXEC Sp_dropmessage @msgnum
В синтаксиса @msgnum определя идентификатора на съобщението, което искате да изтриете.
Сега искаме да изтрием съобщението, чийто идентификатор е 70001 . Запитването е както следва:
EXEC Sp_dropmessage 70001
След като съобщението бъде изтрито, изпълнете следната заявка, за да го видите:
USE master
go
SELECT * FROM sys.messages WHERE message_id = 70001
Изходът:
Както можете да видите, съобщението е изтрито.
Резюме
По този начин ние проучихме израза RAISERROR, неговите параметри и демонстрирахме използването му в практически примери. Също така изяснихме използването на sp_addmessage и sp_dropmessage съхранени процедури. Надяваме се, че тази статия ви донесе полезна информация за вашите работни цели.
Винаги се радваме да чуем вашите коментари и може би допълнителни практически съвети, ако искате да ги споделите.