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

ERROR_MESSAGE()

Termin Definicja
ERROR_MESSAGE()

ERROR_MESSAGE() to funkcja Transact-SQL zwracająca pełną treść komunikatu ostatnio wystąpionego błędu.

ERROR_MESSAGE() w obsłudze błędów Transact-SQL

ERROR_MESSAGE() jest funkcją systemową języka Transact-SQL w Microsoft SQL Server. Zwraca pełną treść komunikatu błędu, który spowodował wejście do aktualnie wykonywanego bloku CATCH. Wynikiem funkcji jest wartość typu nvarchar(4000), dlatego komunikat może zawierać zarówno opis problemu, jak i informacje uzupełniające wygenerowane przez silnik bazy danych. Funkcja nie wymaga argumentów, więc wywołuje się ją jako ERROR_MESSAGE().

Funkcja ma sens przede wszystkim wewnątrz konstrukcji BEGIN TRY ... END TRY oraz BEGIN CATCH ... END CATCH. Przykładowy schemat obsługi wygląda następująco: BEGIN TRY SELECT 1 / 0; END TRY BEGIN CATCH SELECT ERROR_MESSAGE(); END CATCH. Po wystąpieniu błędu dzielenia przez zero SQL Server przekazuje sterowanie do sekcji CATCH, a ERROR_MESSAGE() zwraca tekst opisujący ten konkretny błąd. Wywołanie funkcji poza aktywnym kontekstem CATCH zwraca wartość NULL.

Zakres informacji zwracanej przez funkcję

ERROR_MESSAGE() zwraca sam tekst komunikatu, ale nie zastępuje pozostałych funkcji błędu dostępnych w SQL Server. Pełna diagnostyka często wymaga połączenia jej z ERROR_NUMBER(), ERROR_SEVERITY(), ERROR_STATE(), ERROR_PROCEDURE() i ERROR_LINE(). ERROR_NUMBER() identyfikuje numer błędu, ERROR_SEVERITY() podaje poziom ważności, ERROR_STATE() wskazuje stan związany z miejscem wygenerowania błędu, ERROR_PROCEDURE() może zwrócić nazwę procedury lub wyzwalacza, a ERROR_LINE() numer wiersza, w którym wystąpił problem.

Przykładowe pobranie danych może mieć postać: SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage;. Wszystkie te funkcje błędu są przeznaczone do użycia w bloku CATCH i opisują błąd obsługiwany w tym bloku. ERROR_MESSAGE() nie zwraca historii wcześniejszych błędów, nie odczytuje komunikatów z dziennika SQL Server i nie analizuje samodzielnie wielu wyjątków występujących w całej sesji.

Treść komunikatu może zależeć od konkretnego błędu, instrukcji oraz obiektu, na którym wykonywana jest operacja. Przy naruszeniu ograniczenia unikatowości komunikat może wskazywać nazwę obiektu lub indeksu, natomiast przy błędzie konwersji może zawierać typy danych i fragment wartości powodującej problem. Z tego powodu tekst ERROR_MESSAGE() jest przydatny jako szczegółowy opis zdarzenia, lecz do klasyfikowania błędów należy zachować również jego numer i pozostałe atrybuty.

Rejestrowanie i ponowne zgłaszanie błędu

W praktycznej procedurze T-SQL sekcja CATCH może zapisać informacje o błędzie do tabeli diagnostycznej, zwrócić je aplikacji albo ponownie zgłosić wyjątek. Samo wyświetlenie ERROR_MESSAGE() nie naprawia transakcji ani nie cofa częściowo wykonanych zmian. Jeżeli procedura rozpoczęła transakcję, sposób postępowania trzeba określić osobno, na przykład sprawdzając XACT_STATE() i wykonując ROLLBACK TRANSACTION, gdy transakcja jest możliwa do wycofania.

Do ponownego zgłoszenia aktualnie obsługiwanego błędu służy instrukcja THROW; użyta bez parametrów wewnątrz CATCH. Zachowuje ona pierwotny numer błędu, komunikat i informacje o miejscu wystąpienia. Można również użyć parametryzowanej formy THROW, ale wtedy wymagane są numer błędu większy lub równy 50000, komunikat o długości nie większej niż 2048 znaków oraz stan od 0 do 255. Zastępowanie pierwotnego błędu własnym tekstem może utrudnić późniejsze ustalenie przyczyny, dlatego przy logowaniu warto zapisać wynik ERROR_MESSAGE() przed ewentualnym ponownym zgłoszeniem.

RAISERROR może generować komunikaty o określonym poziomie ważności i stanie, jednak w nowych rozwiązaniach opartych na TRY...CATCH instrukcja THROW jest przeznaczona do ponownego zgłaszania błędów bez utraty pierwotnego kontekstu. ERROR_MESSAGE() można wykorzystać do przygotowania wpisu w tabeli logów, lecz tekst komunikatu powinien być przechowywany razem z numerem błędu, nazwą procedury, numerem wiersza i identyfikatorem operacji. Pozwala to odróżnić powtarzalny błąd danych od problemu w kodzie procedury.

Wykorzystanie ERROR_MESSAGE() przy naprawie komputera z SQL Server

W środowisku zainstalowanego Microsoft SQL Server komunikat ERROR_MESSAGE() może pomóc powiązać objaw widoczny w aplikacji z błędem zwróconym przez procedurę lub zapytanie Transact-SQL. Podczas analizy problemu należy ustalić, czy komunikat pochodzi z aktywnego CATCH, czy został wcześniej zapisany przez aplikację, ponieważ identyczny tekst może być prezentowany użytkownikowi po dodatkowym przetworzeniu. Istotne jest również sprawdzenie numeru błędu, instrukcji wywołującej oraz momentu wystąpienia wyjątku.

Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów PC i podzespołów, a w przypadku problemów z aplikacją korzystającą z SQL Server analiza komunikatu może być jednym z elementów diagnostyki systemu. Sam tekst funkcji nie wskazuje automatycznie uszkodzenia dysku, pamięci RAM ani płyty głównej. Błąd może wynikać z nieprawidłowych danych, konfliktu typów, braku obiektu, naruszenia ograniczenia albo błędnej kolejności operacji w kodzie.

Przy dokumentowaniu awarii warto zachować dokładną treść komunikatu, numer błędu, nazwę procedury i numer wiersza oraz odtworzyć kolejność czynności prowadzących do wyjątku. Taki zestaw danych ułatwia rozdzielenie problemu sprzętowego od błędu konfiguracji lub oprogramowania. ERROR_MESSAGE() dostarcza opisu słownego, ale prawidłowa diagnoza wymaga odniesienia go do konkretnej instrukcji T-SQL, stanu transakcji i zachowania całej aplikacji.

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