我读到这ERROR_STATE()
可以帮助区分源代码中可能发生相同类型错误的不同状态/位置。但是对我来说,真的不清楚如何使用它。
MSDN指出:
ERROR_STATE()
返回导致运行TRY…CATCH构造的CATCH块的错误的状态号。
如何才能真正使用它?可以给我一个例子吗,本参考文章中提供的例子并不能帮助我很好地解释事情吗?
我读到这ERROR_STATE()
可以帮助区分源代码中可能发生相同类型错误的不同状态/位置。但是对我来说,真的不清楚如何使用它。
MSDN指出:
ERROR_STATE()
返回导致运行TRY…CATCH构造的CATCH块的错误的状态号。
如何才能真正使用它?可以给我一个例子吗,本参考文章中提供的例子并不能帮助我很好地解释事情吗?
Answers:
SQL Server错误状态的目的是使SQL Server开发团队能够在代码中识别引起系统错误的确切位置,因为在多个位置引发了许多错误。
作为最终用户(例如,使用SQL Server的应用程序的开发人员),您可以类似地使用传递到的状态,RAISERROR
以便您的产品支持可以确定过程引发错误的位置,例如:
create procedure usp_my_proc
as
if <somecondition>
raiserror(N'Error foo and bar', 16, 0);
if <someothercondition>
raiserror(N'Error foo and bar', 16, 1);
go
查看这两种状态如何使您稍后区分遇到哪种错误情况。在您说“但我可以看一下错误消息”之前,我先告诉您一个词:国际化。
不,它不能帮助您找到有关错误发生位置的任何信息。这是一个简单的例子。如果尝试除以0,则会收到一条错误消息,其中包含许多详细信息:
SELECT 1/0;
结果:
Msg 8134, Level 16, State 1, Line 1
Divide by zero error encountered.
看到一个叫State
,值为1?ERROR_STATE()
返回此值。因此,如果您使用TRY/CATCH
:
BEGIN TRY
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT ERROR_STATE();
END CATCH
结果:
----
1
就这样。在大多数情况下没有用。我建议在深入研究听起来有用的特定功能之前,先全面阅读有关错误处理的内容。
Error_State
和Error_Number
组合可以使您更清楚地了解错误。在这里