Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Изявление RAISERROR на SQL Server с прости примери

Инструкцията 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 съхранени процедури. Надяваме се, че тази статия ви донесе полезна информация за вашите работни цели.

Винаги се радваме да чуем вашите коментари и може би допълнителни практически съвети, ако искате да ги споделите.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразувайте „datetime“ в „datetime2“ в SQL Server (T-SQL примери)

  2. Вземете езика, който в момента се използва в SQL Server

  3. Дестинация на SQL Server спрямо местоназначение на OLE DB

  4. Как да получите статистическа информация за SQL Server с помощта на системни статистически функции

  5. Как да търсите низ в бази данни на SQL Server