ERROR MESSAGE
br>
ERROR MESSAGE to podstawowa, najprostsza forma informowania przez SQL Server o wystąpieniu wyjątku.
br>
Składowe ERROR MESSAGE: |
|
ERROR NUMBER / Message Id | Identyfikator błędu z tabeli systemowej sys.messages. ● Błędy o ID <= 50000 to błędy systemowe. ● Błędy o ID > 50000 to błędy zdefiniowane przez użytkownika. |
ERROR SEVERITY | Oznacza ważność błędu, która może być w przedziale od 0 do 25: ● 0-10: informacje lub ostrzeżenie (WARNING) ● 11-16: Błąd programistyczny ● 17-25: Błędy zasobowe, sprzętowe, systemowe, serwerowe ● 20-25: Zakończenie połączeń Błędy w przedziale 19-25 mogą zostać spowodowane tylko przez administratorów, użytkowników z uprawnieniami SysAdmin. |
ERROR STATE | Oznacza kod stanu błędu, pozwalający na jego lokalizację w kodzie źródłowym. Zakres wartości to od 1 do 127. |
ERROR PROCEDURE | Wskazuję nazwę obiektu (procedury, funcji), w którym wystąpił błąd. Jeżeli błąd powstał w zwykłej kwerendzie, to miejsce będzie puste. |
ERROR LINE | Linia w ciele kodu, w którym wystąpił błąd. |
ERROR MESSAGE | Opis błędu. |
br>
Można definiować własne błędy oraz je usuwać za pomocą procedur:
● sp_addmessage – dodaje błąd
● sp_dropmessage – usuwa błąd
br>
Identyfikacja błędu w kodzie SQL:
W oknie „Messages” widocznym na poniższym zrzucie z ekranu można zidentyfikować położenie błędu w kodzie SQL za pomocą podwójnego kliknięcia (dwukliku) na błędzie:
br>
br>
RAISERROR
br>
RAISERROR pozwala na przechwycenie informacji o wystąpieniu błędu w kodzie SQL i dalszym postępowaniu względem tego błędu.
br>
Składowe RAISERROR: |
|
ERROR MESSAGE | Opis błędu. |
ERROR SEVERITY | Oznacza ważność błędu, która może być w przedziale od 0 do 25: ● 0-10: informacje lub ostrzeżenie (WARNING) ● 11-16: Błąd programistyczny ● 17-25: Błędy zasobowe, sprzętowe, systemowe, serwerowe ● 20-25: Zakończenie połączeń Błędy w przedziale 19-25 mogą zostać spowodowane tylko przez administratorów, użytkowników z uprawnieniami SysAdmin. |
ERROR STATE | Oznacza kod stanu błędu, pozwalający na jego lokalizację w kodzie źródłowym. Zakres wartości to od 1 do 127. Istnieje możliwość zwrócenia stanu o wartości 0, więc warto o tym pamiętać i sprawdzać przed przekazaniem do RAISERROR’a. |
br>
br>
TRY i CATCH
br>
TRY i CATCH jest to struktura, blok kodu pozwalający na przechwycenie i obsługę błędów.
Jeżeli w bloku TRY wystąpi błąd, to automatycznie zostanie on przeniesiony do bloku CATCH, gdzie mamy możliwość jego obsługi. Jeżeli natomiast w bloku TRY nie wystąpi żaden wyjątek to blok CATCH nie zostanie wykonany.
Bloki te otwiera się i zamyka poleceniami BEGIN oraz END:
BEGIN TRY
…
END TRY
BEGIN CATCH
…
END CATCH
W blokach TRY i CATCH mamy możliwość przechwycenia wszystkich składowych błędów za pomocą funkcji:
● ERROR_NUMBER()
● ERROR_MESSAGE()
● ERROR_SEVERITY()
● ERROR_STATE()
● ERROR_LINE()
● ERROR_PROCEDURE()
br>
br>
THROW
br>
THROW jest to polecenie podobne do RAISERROR, także pozwala na przechwycenie informacji o wystąpieniu błędu w kodzie SQL i dalszym postępowaniu względem tego błędu. Jest to nowsze rozwiązanie i producent, czyli Microsoft zaleca używanie właśnie tej składni, która jest mniej skomplikowana od RAISERROR.
RAISERROR i THROW są podobne, jak wcześniej napisałem, więc nie są tożsame, różnice w sposobie działania pokazane są w skrypcie.
Dodatkowe „drobne” różnice między RAISERROR i THROW:
● W RAISERROR przechwytujemy wartość ważności, natomiast w THROW ustawiony jest na sztywno i zawsze zwraca wartość równą 16.
● W RAISERROR błąd zwrócony z ID > 50000 w przypadku braku definicji w tabeli systemowej sys.messages zgłosi kolejny wyjątek, natomiast THROW zadziała.
br>
br>
PLIKI DO ŚCIĄGNIĘCIA:
1. 009_Obsluga_Bledow.sql
br>