Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Instrukcja SQL Server RAISERROR z prostymi przykładami

Instrukcja SQL RAISERROR służy do wysyłania niestandardowego komunikatu do aplikacji klienckiej. Może być również używany do debugowania aplikacji i dotyczy mechanizmu obsługi błędów.

Składnia i parametry instrukcji SQL RAISERROR

Składnia instrukcji SQL RAISERROR jest następująca:

RAISERROR ( { message_text | message_id | @local_variable }  
    { ,severity ,state }  
    [ ,argument [ ,...n ] ]   
    [ WITH option [ ,...n ] ];

Poniżej znajduje się wyjaśnienie parametrów słowa kluczowego RAISERROR, które można określić:

message_text – komunikat, który chcesz wyświetlić w przypadku błędu. Uwaga: Możemy dodać niestandardowe komunikaty, aby pokazać informacje o błędzie. Zobacz to wyjaśnione w drugiej części artykułu.

message_id – identyfikator komunikatu o błędzie. Jeśli chcesz wyświetlić komunikat zdefiniowany przez użytkownika, musisz go zdefiniować. Wyświetl listę identyfikatorów wiadomości w sys.messages DMV .

Zapytanie

select * from sys.messages

Wynik:

dotkliwość – wagę błędu. Typ danych dotkliwości zmienna jest mały , a wartości mieszczą się w zakresie od 0 do 25. Prawidłowe wartości wagi błędu są następujące:

  • 0-10 – komunikaty informacyjne
  • 11-18 – błędy
  • 19-25 – błędy krytyczne

Uwaga : Jeśli utworzysz wiadomość zdefiniowaną przez użytkownika, ważność określona w komunikacie zdefiniowanym przez użytkownika zostanie zastąpiona ważnością określoną w instrukcji RAISERROR.

stan – unikalny numer identyfikacyjny, za pomocą którego można zidentyfikować sekcję kodu powodującą błąd. Typ danych parametru stanu jest mały , a wartości mieszczą się w zakresie od 0 do 255.

Przejdźmy teraz do praktycznych przykładów.

Przykład 1:Użyj instrukcji RAISERROR programu SQL Server do wydrukowania danych wyjściowych

W tym przykładzie możesz zobaczyć, jak możemy wyświetlić komunikat o błędzie lub komunikat informacyjny za pomocą instrukcji RAISERROR.

Załóżmy, że chcesz wyświetlić komunikat po wstawieniu rekordów do tabeli. Możemy użyć instrukcji SQL PRINT lub RAISERROR. Oto kod:

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) 

Wynik:

Jak widać na powyższym obrazku, identyfikator wiadomości to 50000, ponieważ jest to wiadomość zdefiniowana przez użytkownika.

Przykład 2:Instrukcja SQL RAISERROR z dynamicznym tekstem komunikatu

Zobacz teraz, jak możemy utworzyć dynamiczny tekst wiadomości dla instrukcji SQL RAISERROR.

Załóżmy, że w wiadomości chcemy wydrukować identyfikator pacjenta. Zdefiniowałem zmienną lokalną o nazwie @IdPacjenta , który przechowuje identyfikator pacjenta . Aby wyświetlić wartość @patientID w tekście wiadomości możemy użyć następującego kodu:

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) 

Wynik:

Aby wyświetlić ciąg w instrukcji RAISERROR, musimy użyć instrukcji print w stylu C.

Jak widać na powyższym obrazku, do wyświetl parametr w tekście wiadomości, użyłem opcji %s który wyświetla wartość ciągu parametru . Jeśli chcesz wyświetlić parametr całkowity , możesz użyć opcji %d .

Użyj SQL RAISERROR w bloku TRY..CATCH

W tym przykładzie dodajemy SQL RAISERROR w bloku TRY. Kiedy uruchamiamy ten kod, jest on wykonywany do skojarzonego bloku CATCH. W bloku CATCH wyświetlimy szczegóły wywołanego błędu.

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;

W związku z tym dodaliśmy stwierdzenie RAISERROR o ważności między 11 -19. Powoduje wykonanie bloku CATCH.

W bloku CATCH pokazujemy informacje o pierwotnym błędzie za pomocą instrukcji RAISERROR.

Wynik:

Jak widać, kod zwrócił informacje o pierwotnym błędzie.

Teraz wyjaśnijmy, jak możemy dodać niestandardową wiadomość za pomocą sp_addmessage procedura składowana.

procedura zapisana sp_addmessage

Możemy dodać wiadomość niestandardową, wykonując sp_addmessages procedura składowana. Składnia to:

EXEC Sp_addmessage 
  @msgnum= 70001, 
  @severity=16, 
  @msgtext='Please enter the numeric value', 
  @lang=NULL, 
  @with_log='TRUE', 
  @replace='Replace'; 

@msgnum: Podaj numer wiadomości. Typ danych parametru to liczba całkowita. Jest to identyfikator wiadomości zdefiniowanej przez użytkownika.

@ważność: Określ poziom ważności błędu. Prawidłowe wartości mieszczą się w zakresie od 1 do 25. Typ danych parametru to smallint.

@messagetext: Określ komunikat, który chcesz wyświetlić. Typ danych parametru to nvarchar(255), a domyślna wartość to NULL.

@lang: Określ język, którego chcesz używać do wyświetlania komunikatu o błędzie. Wartość domyślna to NULL.

@with_log: Ten parametr służy do zapisania wiadomości do przeglądarki zdarzeń. Prawidłowe wartości to TRUE i FALSE. Jeśli określisz TRUE, komunikat o błędzie zostanie zapisany w przeglądarce zdarzeń systemu Windows. Jeśli wybierzesz FALSE, błąd nie zostanie zapisany w dzienniku błędów systemu Windows.

@replace: Jeśli chcesz zastąpić istniejący komunikat o błędzie komunikatem zdefiniowanym przez użytkownika i poziomem ważności, możesz określić zastąpienie w procedurze składowanej.

Załóżmy, że chcesz utworzyć komunikat o błędzie, który zwraca nieprawidłową jakość błąd. W instrukcji INSERT wartość ilości_produktu wynosi od 20 do 100. Wiadomość powinna być traktowana jako błąd, a ważność wynosi 16.

Aby utworzyć wiadomość, uruchom następujące zapytanie:

USE master;
go 
EXEC Sp_addmessage 
  70001, 
  16, 
  N'Product Quantity must be between 20 and 100.'; 
go

Po dodaniu wiadomości uruchom poniższe zapytanie, aby ją wyświetlić:

USE master 
go 
SELECT * FROM   sys.messages WHERE  message_id = 70001 

Wynik:

Jak korzystać z komunikatów o błędach zdefiniowanych przez użytkownika

Jak wspomniałem wcześniej, musimy użyć message_id w instrukcji RAISERROR dla wiadomości zdefiniowanych przez użytkownika.

Stworzyliśmy wiadomość o identyfikatorze 70001. Wyrażenie RAISERROR powinno wyglądać następująco:

USE master 
go 
RAISERROR (70001,16,1 ); 
go 

Wynik:

Instrukcja RAISERROR zwróciła wiadomość zdefiniowaną przez użytkownika.

procedura przechowywana sp_dropmessage

wiadomość sp_drop procedura składowana służy do usuwania wiadomości zdefiniowanych przez użytkownika. Składnia jest następująca:

EXEC Sp_dropmessage @msgnum

W składni @msgnum określa identyfikator wiadomości, którą chcesz usunąć.

Teraz chcemy usunąć wiadomość, której identyfikator to 70001 . Zapytanie jest następujące:

EXEC Sp_dropmessage 70001 

Po usunięciu wiadomości uruchom następujące zapytanie, aby ją wyświetlić:

USE master 
go 
SELECT * FROM   sys.messages WHERE  message_id = 70001 

Wynik:

Jak widać, wiadomość została usunięta.

Podsumowanie

W związku z tym zbadaliśmy instrukcję RAISERROR, jej parametry i zademonstrowaliśmy jej zastosowanie na praktycznych przykładach. Wyjaśniliśmy również użycie sp_addmessage i sp_dropmessage procedury składowane. Mam nadzieję, że ten artykuł przyniósł Ci przydatne informacje dotyczące Twoich celów roboczych.

Zawsze chętnie wysłuchamy Twoich komentarzy i być może dodatkowych praktycznych wskazówek, jeśli chcesz się nimi podzielić.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 3 sposoby konwersji liczby całkowitej na dziesiętną w SQL Server

  2. to_sql pyodbc pole licznika nieprawidłowe lub błąd składni

  3. Jak utworzyć klucz złożony za pomocą programu SQL Server Management Studio?

  4. Wykluczyć kolumnę za pomocą SELECT * [oprócz kolumny A] FROM tabela A?

  5. Podzapytanie programu SQL Server zwróciło więcej niż 1 wartość. Nie jest to dozwolone, gdy podzapytanie następuje po =, !=, <, <=,>,>=