Я читал, что это ERROR_STATE()
может помочь различать различные состояния / места в исходном коде, где может возникать один и тот же тип ошибки. Но мне не совсем понятно, как это может быть полезно.
MSDN заявляет:
ERROR_STATE()
Возвращает номер состояния ошибки, вызвавшей запуск блока CATCH конструкции TRY… CATCH.
Как это можно реально использовать? Кто-нибудь может дать мне пример, те, что приведены в этой справочной статье , на самом деле не помогают объяснить вещи для меня?
sql-server
sql-server-2008
error-handling
jaczjill
источник
источник
Error_State
иError_Number
комбинация даст вам более четкую картину об ошибке. Взгляните на другие функции, связанные с обработкой ошибок здесьОтветы:
Цель состояний ошибок SQL Server состоит в том, чтобы группа разработчиков SQL Server могла идентифицировать в коде точное место возникновения системных ошибок, учитывая, что многие ошибки возникают в разных местах.
Вы, как конечный пользователь (т.е. разработчик приложений, использующих SQL Server), можете аналогичным образом использовать переданное состояние, чтобы
RAISERROR
служба поддержки вашего продукта могла определить место, в котором процедура вызывает ошибку, например:Посмотрите, как два состояния позволяют позже определить, в каком случае произошла ошибка. Прежде чем сказать «но я могу посмотреть на сообщение об ошибке», я говорю вам одно слово: интернационализация.
источник
Нет, это не поможет вам узнать, где произошла ошибка. Вот быстрый пример. Если вы попытаетесь разделить на 0, вы получите сообщение об ошибке с кучей деталей:
Результат:
Видите тот, который называется
State
, со значением 1?ERROR_STATE()
возвращает это значение. Так что если вы используетеTRY/CATCH
:Результат:
Это все. Не полезно в большинстве сценариев. Я предлагаю больше прочитать об обработке ошибок в целом, прежде чем углубляться в конкретные функции, которые кажутся полезными.
http://msdn.microsoft.com/en-us/library/ms175976.aspx
http://www.sommarskog.se/error_handling_2005.html
источник
Краткий ответ - не может. ERROR_STATE - это подразделение ERROR_NUMBER. Он не может сказать вам, какая строка кода вызвала ошибку (кроме случаев, когда ERROR_NUMBER и ERROR_STATE вместе сообщают вам причину ошибки, и тогда становится очевидным, в чем причина).
источник