Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Funkcja ERROR_STATE()

Termin Definicja
Funkcja ERROR_STATE()

Funkcja ERROR_STATE() zwraca numer stanu ostatnio wystąpionego błędu.

Czym jest funkcja ERROR_STATE

ERROR_STATE to funkcja systemowa Transact-SQL w Microsoft SQL Server, zwracająca wartość typu int oznaczającą stan błędu, który spowodował wejście do bloku CATCH. Stan to liczba pomocnicza dołączana do komunikatu obok numeru błędu i poziomu ważności. Ma ona znaczenie diagnostyczne: ten sam numer błędu może zostać zgłoszony z wielu miejsc w kodzie silnika, a stan pozwala rozróżnić, które z nich zadziałało. Klasycznym przykładem jest błąd 18456 o nieudanym logowaniu, gdzie stan wskazuje faktyczną przyczynę, na przykład złe hasło, nieistniejącego użytkownika albo konto wyłączone.

Miejsce w rodzinie funkcji błędów

ERROR_STATE należy do zestawu obejmującego ERROR_NUMBER, ERROR_SEVERITY, ERROR_LINE, ERROR_PROCEDURE i ERROR_MESSAGE. Wszystkie działają wyłącznie w zakresie bloku CATCH konstrukcji TRY CATCH i poza nim zwracają NULL. W odróżnieniu od zmiennej systemowej ERRORNUMBER, która jest kasowana przez pierwszą kolejną instrukcję, funkcje te zachowują wartość przez cały blok CATCH, dzięki czemu można je najpierw zapisać do tabeli dziennika, a potem użyć do ponownego zgłoszenia błędu. Typowe zastosowanie to przekazanie kompletu informacji do RAISERROR albo, w nowszych wersjach, samo wywołanie THROW bez argumentów, które odtwarza oryginalny błąd wraz z jego numerem i stanem.

Pułapki przy obsłudze błędów

Pierwsza to przekonanie, że TRY CATCH przechwyci wszystko. Nie przechwytuje błędów kompilacji ani błędów rozpoznania nazw obiektów w tym samym zakresie, więc odwołanie do nieistniejącej tabeli w tym samym bloku przerwie wykonanie mimo obecności CATCH. Nie przechwyci też przerwań o poziomie ważności dwadzieścia i wyżej, które zrywają połączenie. Druga to zgubienie transakcji: po wejściu do CATCH transakcja może być w stanie niezdatnym do zatwierdzenia, co sprawdza się funkcją XACT_STATE, a próba COMMIT kończy się kolejnym błędem. Trzecia to ponowne zgłaszanie błędu przez RAISERROR z własnym tekstem, przy którym oryginalny numer i stan przepadają, a diagnostyka po fakcie staje się zgadywanką. Czwarta, spotykana w aplikacjach, to przekazywanie pełnego komunikatu błędu do interfejsu użytkownika, przez co na ekran trafiają nazwy tabel i fragmenty zapytań.

Kiedy błąd bazy oznacza problem ze sprzętem

Część błędów zgłaszanych przez SQL Server ma źródło poza kodem: uszkodzone strony danych, przerwane operacje zapisu przy zaniku zasilania, wadliwa pamięć RAM czy dysk z narastającą liczbą realokowanych sektorów. Warszawskie Pogotowie Komputerowe zajmuje się właśnie tą warstwą: testujemy pamięć i dyski, sprawdzamy zasilanie i chłodzenie serwerów oraz stacji roboczych, wymieniamy nośniki i konfigurujemy kopie zapasowe, żeby awaria sprzętu nie oznaczała utraty bazy. Dojeżdżamy do firm w Warszawie, a diagnoza jest bezpłatna.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę