Przeczytałem, że ERROR_STATE()
może to pomóc w rozróżnieniu różnych stanów / lokalizacji w kodzie źródłowym, w których może wystąpić ten sam typ błędu. Ale nie jest dla mnie jasne, jak to może być przydatne.
MSDN stwierdza:
ERROR_STATE()
Zwraca numer stanu błędu, który spowodował uruchomienie bloku CATCH konstrukcji TRY… CATCH.
Jak można go naprawdę wykorzystać? Czy ktoś może mi podać przykład, podane w tym artykule referencyjnym nie pomagają mi dobrze wyjaśnić rzeczy?
sql-server
sql-server-2008
error-handling
jaczjill
źródło
źródło
Error_State
aError_Number
kombinacja daje wyraźniejszy obraz błędu. Zobacz inne funkcje związane z obsługą błędów tutajOdpowiedzi:
Celem stanów błędów programu SQL Server jest umożliwienie zespołowi programistycznemu SQL Server zidentyfikowania dokładnego miejsca, w którym zgłoszono błędy systemowe, biorąc pod uwagę, że wiele błędów jest zgłaszanych w wielu miejscach.
Jako użytkownik końcowy (tj. Programista aplikacji korzystających z programu SQL Server) możesz podobnie wykorzystać przekazany stan
RAISERROR
, aby dział wsparcia produktu mógł zidentyfikować miejsce, w którym procedura wywołuje błąd, na przykład:Zobacz, jak oba te stany pozwalają później rozróżnić, który przypadek błędu został trafiony. Zanim powiesz „ale mogę spojrzeć na komunikat o błędzie”, mówię ci jedno słowo: internacjonalizacja.
źródło
Nie, nie pomaga ci dowiedzieć się, gdzie wystąpił błąd. Oto szybki przykład. Jeśli spróbujesz podzielić przez 0, pojawi się komunikat o błędzie z wieloma szczegółami:
Wynik:
Widzisz ten o nazwie
State
1?ERROR_STATE()
zwraca tę wartość. Więc jeśli użyjeszTRY/CATCH
:Wynik:
To wszystko. Nieprzydatne w większości scenariuszy. Sugeruję więcej lektur na temat obsługi błędów w ogóle, zanim zanurkujesz zbyt głęboko w konkretne funkcje, które wydają się przydatne.
http://msdn.microsoft.com/en-us/library/ms175976.aspx
http://www.sommarskog.se/error_handling_2005.html
źródło
Krótka odpowiedź - nie może. ERROR_STATE jest w zasadzie poddziałem ERROR_NUMBER. Nie może powiedzieć, który wiersz kodu spowodował błąd (z wyjątkiem sytuacji, gdy ERROR_NUMBER i ERROR_STATE razem podają przyczynę błędu, a następnie staje się oczywiste, jaka jest przyczyna).
źródło