jac*_*ill 15 sql-server-2008 sql-server error-handling
我读到这ERROR_STATE()
有助于区分源代码中可能发生相同类型错误的不同状态/位置。但我并不清楚它如何有用。
MSDN 指出:
ERROR_STATE()
返回导致运行 TRY…CATCH 构造的 CATCH 块的错误的状态编号。
如何真正使用它?有人可以举个例子吗,这篇参考文章中提供的那些并不能真正帮助我很好地解释事情?
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
Run Code Online (Sandbox Code Playgroud)
看看这两种状态如何让您稍后区分哪个错误案例被击中。在您说“但我可以查看错误消息”之前,我要告诉您一个词:国际化。
不,它不能帮助您找出错误发生的位置。这是一个快速示例。如果您尝试除以 0,您会收到一条包含大量详细信息的错误消息:
SELECT 1/0;
Run Code Online (Sandbox Code Playgroud)
结果:
Msg 8134, Level 16, State 1, Line 1
Divide by zero error encountered.
Run Code Online (Sandbox Code Playgroud)
看到一个名为State
,值为 1 的吗?ERROR_STATE()
返回这个值。所以如果你使用TRY/CATCH
:
BEGIN TRY
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT ERROR_STATE();
END CATCH
Run Code Online (Sandbox Code Playgroud)
结果:
----
1
Run Code Online (Sandbox Code Playgroud)
就这样。在大多数情况下没有用。我建议在深入研究听起来有用的特定功能之前,更多地阅读一般的错误处理。
http://msdn.microsoft.com/en-us/library/ms175976.aspx
http://www.sommarskog.se/error_handling_2005.html
归档时间: |
|
查看次数: |
16880 次 |
最近记录: |