Instrukcja rzucania serwera SQL

Instrukcja rzucania serwera SQL

Błędy są nieuniknione, jeśli chodzi o rozwój. Jest to zatem dobry plan, aby upewnić się, że wdrożyłeś pewne środki, aby błędy nie przełamały funkcjonalności aplikacji.

SQL Server pozwala nam korzystać z instrukcji rzutów, aby podnieść wyjątek. Następnie przenosimy kontekst wykonania do bloku próbowania, aby obsłużyć błąd.

Składnia

Poniższy fragment kodu pokazuje składnię instrukcji rzutów:

Rzut [error_numer,
Komunikat o błędzie,
państwo];

Argumenty w dostarczonej składni zawierają następujące:

  1. Error_number - Jest to wartość liczb całkowita, która określa podniesiony wyjątek. Numer błędu musi znajdować się w zakresie 50000 i 2147483647. Pamiętaj, że kody błędów poniżej 50000 są zarezerwowane dla silnika SQL Server.
  2. Komunikat o błędzie - Odnosi się to do wartości ciągu, która działa jako opis podniesionego wyjątku. Musi być typu nvarchar.
  3. państwo - Argument stanowy jest wartością liczb całkowitych w zakresie od 0 do 255, oznaczającym stan powiązany z błąd_message.

Uwaga: każde stwierdzenie przed klauzulą ​​rzutów musi zostać zakończone półkolisem. Serwer SQL wymaga również, aby rzut uwzględnił poprzednie argumenty. Jeśli oświadczenie nie ma poprzednich argumentów, musi być zamknięte w bloku try/catch.

Składnia jest następująca:

Zacznij próbować
-- potencjalne błędy
Koniec spróbuj
Zacznij złapać
-- Zrób to, jeśli wystąpi błąd
RZUCIĆ;
Końcowy haczyk

Nie możesz użyć % znaku w parametrze ERROR_MESSAGE. Jest tak, ponieważ jest to postać zastrzeżona. Jeśli chcesz dołączyć%znaku w komunikacie o błędzie, upewnij się, że uciekajcie, mając podwójny procent znaków (%%).

Przykłady instrukcji rzutów SQL Server

Rzućmy okiem na kilka przykładów oświadczenia rzutów w akcji.

SQL Server za pomocą instrukcji rzutów, aby rzucić wyjątek

Poniższy przykład pokazuje użycie instrukcji rzutu w celu podniesienia wyjątku:

rzut 50001, „[Fail] - żądana wartość nie została znaleziona.', 1;

W tym przykładzie używamy instrukcji rzutów, aby podnieść wyjątek z kodem błędu 50001 i stanem 1.

Powstałe wyjście jest następujące:

Błąd SQL [50001] [S0001]: [Fail] - żądana wartość nie została znaleziona.

SQL Server Rethrows wyjątek za pomocą instrukcji rzutów

Możemy również użyć wyjątku rzutów, aby ponownie przetworzyć ostatni wyjątek. Przykładowy kod jest następujący:

Stół zrzutu, jeśli istnieje t;
Utwórz tabelę t (
Id int not zerowy klucz podstawowy,
);
zacznij próbować
wstaw do wartości t (id) (1);
-- Rzuć wyjątek
wstaw do wartości t (id) (1);
koniec spróbuj
Zacznij złapać
druk („Błąd złapany”);
rzucić;
końcowy haczyk;

Poprzednie zapytanie powinno wydrukować następujące czynności:

złapany błąd
Błąd SQL [2627] [23000]: Naruszenie ograniczenia klucza podstawowego „PK__T__3213E83F35AD099E”. Nie można wstawić zduplikowanego klucza do obiektu 'dbo.T'. Duplikowana wartość kluczowa to (1).

Korzystanie z formatmessage do wyrzucenia dostosowanej wiadomości

Poniższy przykład pokazuje, jak korzystać z funkcji FormatMessage, aby rzucić wyjątek z dostosowanym komunikatem:

EXEC SYS.SP_ADDMESSAGE @MSGNUM = 50001,
@Severity = 20,
@msgtext = 'dostosowany komunikat, w tym zmienna: %d',
@Lang = „US_ENGLISH”,
@with_log = false,
@replace = null;
Deklaruj @msg nvarchar (2048) = FormatMessage (50001, 100);
Rzuć 50001, @MSG, 1;

W takim przypadku funkcja FormatMessage pozwala nam dodać dostosowane komunikaty, w tym zmienne. Ponownie możesz sprawdzić dokumenty na SQL Server SP_ADDMESSAGE (), aby dowiedzieć się więcej.

Powstały komunikat o błędzie jest następujący:

Błąd SQL [50001] [S0001]: dostosowana wiadomość, w tym zmienna: 100

Wniosek

W tym poście omówiono, w jaki sposób użyć klauzuli rzutu na serwerze SQL, aby podnieść wyjątek.

Dziękuje za przeczytanie!