Podsumowanie: w tym samouczku dowiesz się, jak używać instrukcji SQL Server RAISERROR
do generowania komunikatów o błędach zdefiniowanych przez użytkownika.
Jeśli tworzysz nową aplikację, powinieneś użyć instrukcjiTHROW
.,
SQL Server raiseerror statement overview
InstrukcjaRAISERROR
umożliwia generowanie własnych komunikatów o błędach i zwracanie tych komunikatów z powrotem do aplikacji przy użyciu tego samego formatu, co komunikat o błędzie systemowym lub ostrzeżenie generowane przez silnik bazy danych SQL Server. Ponadto InstrukcjaRAISERROR
pozwala ustawić określony identyfikator wiadomości, poziom nasilenia i stan komunikatów o błędach.,
poniżej przedstawiono składnię instrukcji RAISERROR
:
przyjrzyjmy się składni instrukcji RAISERROR
dla lepszego zrozumienia.
message_id
message_id
jest zdefiniowanym przez użytkownika numerem Komunikatu o błędzie przechowywanym w widoku katalogusys.messages
.
aby dodać nowy numer komunikatu o błędzie zdefiniowany przez użytkownika, należy użyć procedury składowanej sp_addmessage
. Zdefiniowany przez użytkownika numer komunikatu o błędzie powinien być większy niż 50 000., Domyślnie InstrukcjaRAISERROR
używamessage_id
50,000 do zgłoszenia błędu.,
poniższe polecenie dodaje niestandardowy komunikat o błędzie do widoku sys.messages
:
aby zweryfikować wstawkę, należy użyć następującego zapytania:
Code language: SQL (Structured Query Language) (sql)
aby użyć tego message_id, należy wykonać polecenie RAISEERROR
w następujący sposób:
Code language: SQL (Structured Query Language) (sql)
oto wyjście:
Code language: SQL (Structured Query Language) (sql)
aby usunąć wiadomość z sys.messages
, używasz procedury składowanej sp_dropmessage
., Na przykład, następujące polecenie usuwa wiadomość o id 50005:
Code language: SQL (Structured Query Language) (sql)
message_text
message_text
jest zdefiniowaną przez użytkownika Komunikatem z formatowaniem podobnym do funkcji printf
w bibliotece standardowej C. message_text
może mieć maksymalnie 2047 znaków, 3 ostatnie znaki są zarezerwowane dla elipsy (…). Jeśli message_text
zawiera 2048 lub więcej, zostanie obcięty i wyściełany wielokropkiem.,
gdy podaszmessage_text
, InstrukcjaRAISERROR
używa message_id 50000 do wywołania Komunikatu o błędzie.
poniższy przykład używa instrukcji RAISERROR
, aby wywołać błąd z tekstem wiadomości:
Code language: SQL (Structured Query Language) (sql)
wynik będzie wyglądał następująco:
Code language: SQL (Structured Query Language) (sql)
severity
poziom severity jest liczba całkowita między 0 a 25, przy czym każdy poziom reprezentuje powagę błędu.
Code language: SQL (Structured Query Language) (sql)
stan
stan jest liczbą całkowitą od 0 do 255., Jeśli wystąpi ten sam błąd zdefiniowany przez użytkownika w wielu lokalizacjach, możesz użyć unikalnego numeru stanu dla każdej lokalizacji, aby łatwiej znaleźć sekcję kodu, która powoduje błędy. Dla większości implementacji można użyć 1.
z opcją
opcja może być LOG
, NOWAIT
lub SETERROR
:
-
WITH LOG
rejestruje błąd w dzienniku błędów i dzienniku aplikacji dla instancji silnika bazy danych SQL Server., WITH NOWAIT
natychmiast wysyła komunikat o błędzie do klienta.WITH SETERROR
ustawia wartościERROR_NUMBER
I@@ERROR
na message_id lub 50000, niezależnie od poziomu ważności.
przykłady SQL Server RAISERROR
weźmy kilka przykładów użycia instrukcjiRAISERROR
, aby uzyskać lepsze zrozumienie.,
A) użycie SQL Server RAISERROR z try CATCH block przykład
w tym przykładzie używamy bloku RAISERROR
wewnątrz bloku TRY
, aby spowodować przejście do powiązanego bloku CATCH
. Wewnątrz bloku CATCH
używamy bloku RAISERROR
, aby zwrócić informacje o błędzie wywołującym blok CATCH
.,
oto wyjście:
Code language: SQL (Structured Query Language) (sql)
B) UŻYWANIE instrukcji SQL Server RAISERROR z dynamicznym tekstem wiadomości przykład
poniższy przykład pokazuje, jak użyć zmiennej lokalnej do dostarczenia tekstu wiadomości dla RAISERROR
Instrukcja:
wyjście jest następujące:
Code language: SQL (Structured Query Language) (sql)
kiedy używać instrukcji RAISERROR
używasz instrukcji RAISERROR
w następujących scenariuszach:
- rozwiązywanie problemów z kodem Transact-SQL.
- zwraca wiadomości zawierające zmienny tekst.
- sprawdza wartości danych.,
- powoduje, że wykonanie przeskakuje z bloku
TRY
do powiązanego blokuCATCH
. - Zwraca informacje o błędzie z bloku
CATCH
do wywołujących, zarówno wywołujących batch, jak i aplikację.
w tym samouczku dowiesz się, jak używać instrukcji SQL Server RAISERROR
do generowania komunikatów o błędach zdefiniowanych przez użytkownika.