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

Co to jest RAISERROR programu SQL Server?

Gdy coś pójdzie nie tak w T-SQL, chcesz szybko naprawić problem przy minimalnym kopaniu i zakłócaniu pracy użytkowników. Komunikaty o błędach generowane przez program SQL Server są wysoce techniczne i trudne do zrozumienia, co może utrudnić izolowanie problemów i spowolnić czas rozwiązywania problemów. Na szczęście administratorzy baz danych mogą zaimplementować SQL Server RAISERROR jako alternatywę dla komunikatów o błędach SQL Server.

RAISERROR to instrukcja obsługi błędów programu SQL Server, która generuje komunikat o błędzie i inicjuje przetwarzanie błędów. RAISERROR może albo odwoływać się do komunikatu zdefiniowanego przez użytkownika, który jest przechowywany w widoku katalogu sys.messages, albo może tworzyć komunikat dynamicznie. Komunikat jest zwracany jako komunikat o błędzie serwera do aplikacji wywołującej lub do skojarzonego bloku CATCH konstrukcji TRY...CATCH.

Istnieje kilka scenariuszy, w których właściwe jest użycie instrukcji RAISERROR:

  • Rozwiązywanie problemów z kodem Transact-SQL
  • Zwracanie wiadomości zawierających zmienny tekst
  • Badanie wartości danych
  • Kiedy potrzebujesz wykonania, aby przeskoczyć z bloku TRY do skojarzonego bloku CATCH lub zwrócić informacje o błędzie z bloku CATCH do wywołujących

Należy zauważyć, że podczas tworzenia nowych aplikacji, instrukcja THROW jest teraz preferowana do obsługi błędów niż RAISERROR. Ale o tym później.

Dlaczego używać RAISERROR do obsługi błędów programu SQL Server?

Istnieją dwa główne powody wyboru RAISERROR zamiast obsługi błędów generowanych przez SQL Server:

  1. Komunikaty RAISERROR można dostosować pod względem poziomu ważności i stanu
  2. Mogą być napisane w języku naturalnym, który jest łatwy do zrozumienia

RAISERROR zwraca komunikaty o błędach do aplikacji w tym samym formacie, który jest generowany przez Aparat baz danych programu SQL Server. Umożliwia programistom generowanie własnych komunikatów o błędach, dzięki czemu każdy, kto czyta komunikat, będzie mógł zrozumieć, na czym polega rzeczywisty problem, zamiast próbować odszyfrować komunikat o błędzie technicznym SQL Server. Deweloperzy mogą również ustawić własny poziom ważności, identyfikator komunikatu i stan komunikatów o błędach.

Używanie RAISERROR z konstrukcją TRY...CATCH

TRY...CATCH to konstrukcja obsługi błędów, która umożliwia wykonanie kodu w sekcji TRY i obsługę błędów w sekcji CATCH. Ogólnie rzecz biorąc, TRY...CATCH jest skutecznym sposobem identyfikacji wielu błędów T-SQL, ale istnieje kilka wyjątków.

Ten samouczek zawiera szczegółowy przewodnik dotyczący używania RAISERROR w połączeniu z TRY...CATCH. Autor używa przykładu pokazującego, jak użyć RAISERROR wewnątrz bloku TRY, aby spowodować, że wykonanie przeskoczy do skojarzonego bloku CATCH. Wewnątrz bloku CATCH autor pokazuje, jak użyć RAISERROR do zwrócenia informacji o błędzie, które wywołały blok CATCH. Dane wyjściowe wyświetlają identyfikator wiadomości, poziom ważności i stan błędu.

RAISERROR vs. THROW Instrukcje obsługi błędów

RAISERROR został wprowadzony w SQL Server 7.0 i od wielu lat jest skutecznym sposobem obsługi błędów T-SQL. Ale jeśli tworzysz nowe aplikacje, firma Microsoft zaleca teraz używanie instrukcji THROW zamiast RAISERROR.

Wraz z aktualizacją organizacji do wersji SQL Server 2012 i nowszych, program RAISERROR jest wycofywany. W rzeczywistości RAISERROR nie może być używany w natywnie skompilowanych procedurach składowanych programu SQL Server 2014. THROW jest uważany za ulepszenie w stosunku do RAISERROR, ponieważ jest łatwiejszy w użyciu.

Dokumentacja Microsoft SQL Server przedstawia różnice między instrukcjami obsługi błędów RAISERROR i THROW w następujący sposób:

Oświadczenie RAISERROR

  • Jeśli msg_id jest przekazywany do RAISERROR, identyfikator musi być zdefiniowany w sys.messages.
  • Parametr msg_str może zawierać style formatowania printf.

Parametr ważności określa wagę wyjątku.

Oświadczenie THROW

  • Parametr numer_błędu nie musi być zdefiniowany w sys.messages.
  • Parametr wiadomości nie akceptuje formatowania stylu printf.
  • Brak parametru ważności. Ważność wyjątku jest zawsze ustawiona na 16.

Chociaż dni RAISERROR mogą być ponumerowane, pozostaje realną opcją obsługi błędów w starszych wersjach SQL Server. Firma Microsoft zachęca użytkowników nowszych wersji programu SQL Server (SQL SERVER 2012 i nowsze) do używania instrukcji THROW zamiast RAISERROR do implementacji obsługi błędów. Microsoft nie ogłosił jeszcze wycofania RAISERROR, ale wydaje się prawdopodobne, że prędzej niż później.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przenieść lub wyeksportować dane SQL Server 2005 do Excela?

  2. 32-bitowy program Excel i 64-bitowy serwer SQL

  3. Jak znaleźć tabele zawierające określoną kolumnę w SQL Server

  4. 3 sposoby wyodrębnienia miesiąca z daty w SQL Server (T-SQL)

  5. Co to jest ograniczenie sprawdzające w SQL Server — samouczek SQL Server / TSQL — część 82