Blog JSystems - uwalniamy wiedzę!

Szukaj

@@ERROR

Zmienna @@ERROR zwraca wartość 0 jeśli ostatnie polecenie umieszczone w kodzie przed nią zakończyło się sukcesem lub numer błędu jaki został wygenerowany przez wcześniejsze polecenie. Należy jednak pamiętać że jeśli w kodzie umieścimy kilka instrukcji, z czego jedna z nich wygeneruje błąd, a kolejn się zakończy sukcesem i dopiero wtedy skorzystamy ze zmiennej @@ERROR to ta zwróci wartości 0.

Poniżej kod z nieprawidłowym wykorzystaniem zmiennej @@ERROR

Obsługa wyjątków w T-SQL: ilustracja poglądowa

Zmienna @@ERROR zwraca wartość zero, ponieważ polecenie: " PRINT 'INSERT INTO HR.Employees (EmployeeID) VALIES (100);' " wykonało się bez żadnego błędu.

Poniżej już prawidłowe zastosowanie zmiennej @@ERROR:

Obsługa wyjątków w T-SQL: ilustracja poglądowa (2)

Co oznacza wygenerowany numer błędu mozna sprawdzić w słowniku SYSMESSAGES.

Obsługa wyjątków w T-SQL: ilustracja poglądowa (3)

RAISERROR

Procedura RAISERROR umożliwia wywołanie błędu w kodzie, najczęściej używa się jej do wywołania kontrolowanego błędu w aplikacji.

RAISERROR: Obsługa wyjątków w T-SQL

SP_ADDMESSAGE

Przy użyciu procedury AP_ADDMESSAGE dodajemy własne komunikaty. Muszą one posiadać numer nie mniejszy niż 50001 i mogą być określone dla danego języka.

SP_ADDMESSAGE: Obsługa wyjątków w T-SQL

W przypadku pomyłki i chęci dodania nowego komunikatu o tym samym numerze otrzymamy komunikat o błędzie:

SP_ADDMESSAGE: Obsługa wyjątków w T-SQL (2)

Zakładając potrzebę ponownego wykorzystania danego numeru kominukatu, poprzedni możemy usunąć za pomocą procedury SP_DROPMESSAGE

SP_ADDMESSAGE: Obsługa wyjątków w T-SQL (3)

TRY CATCH

Blok TRY jest definiowany przez polecenia BEGIN TRY i END TRY, w którym umieszcza się cały kod, który należy objąć sprawdzeniem.

Blok CACTH definiowany jest w podobny sposób poprzez polecenia BEGIN CATCH i END CATCH, jest on uruchamiany jeśli blok TRY wygeneruje błąd.

Poniżej przykład kiedy w bloku TRY instrukcje wykonały się prawidłowo, wtedy blok CATCH się nie uruchamia, w związku zczym na konsoli widzimy komunikat o powodzeniu, pochodzący z bloku TRY.

TRY CATCH: Obsługa wyjątków w T-SQL

Natomiast poniżej kod, gdzie w bloku TRY wygenerowany został błąd, polegający na próbie dzielenia przez zero. Blok TRY wtedy przerywa swoje działanie i uruchamiany jest kod znajdujący się w bloku CATCH.

TRY CATCH: Obsługa wyjątków w T-SQL (2)

 

 

Baner szkolenia Kompleksowe SQL w Microsoft SQL Server w JSystems, terminy gwarantowane

Szkolenie Kompleksowe SQL w Microsoft SQL Server →

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Co zwraca zmienna systemowa @@ERROR w T-SQL?
Zmienna @@ERROR zwraca zero, jeśli poprzednie polecenie zakończyło się sukcesem, albo numer błędu wygenerowanego przez to polecenie. Kluczowa pułapka: odnosi się wyłącznie do bezpośrednio poprzedzającej instrukcji.
Dlaczego @@ERROR czasem pokazuje zero mimo wcześniejszego błędu?
Jeśli między błędnym poleceniem a odczytem @@ERROR wykona się jeszcze jedna instrukcja zakończona sukcesem, zmienna pokaże zero. @@ERROR odzwierciedla stan tylko ostatniego polecenia, dlatego trzeba ją sprawdzać zaraz po instrukcji, którą monitorujemy.
Do czego służy polecenie RAISERROR?
RAISERROR pozwala wywołać błąd z poziomu kodu, najczęściej po to, aby w kontrolowany sposób zgłosić problem do aplikacji. Dzięki temu możesz zatrzymać dalsze przetwarzanie i przekazać własny komunikat o błędzie.
Jak działa blok TRY CATCH w T-SQL?
Kod objęty sprawdzeniem umieszczasz między BEGIN TRY a END TRY. Jeśli wygeneruje on błąd, wykonywanie bloku TRY zostaje przerwane i uruchamiany jest kod z bloku CATCH, zdefiniowanego przez BEGIN CATCH i END CATCH. Gdy błędu nie ma, CATCH się nie uruchamia.
Jak dodać własny komunikat o błędzie?
Własne komunikaty dodajesz procedurą sp_addmessage, nadając im numer nie mniejszy niż 50001, opcjonalnie dla wybranego języka. Aby ponownie użyć zajętego numeru, wcześniejszy komunikat usuwasz procedurą sp_dropmessage.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...