关于Sql Server 2005错误处理:Sql Server 2005错误处理-内部异常

关于Sql Server 2005错误处理:Sql Server 2005错误处理-内部异常

Sql Server 2005 error handling - inner exception

在 C# 中,您可以获取原始错误并使用传递的内部异常跟踪执行路径(堆栈跟踪)。我想知道当嵌套 2 或 3 级深度的存储过程中发生错误时,如何使用 sql server 2005 中的错误处理 try/catch 来实现这一点。

我希望像 ERROR_MESSAGE()、ERROR_LINE()、ERROR_PROCEDURE()、ERROR_SEVERITY() 这样的函数可以轻松地向上传递,以便顶级存储过程可以访问它们。


处理此问题的最佳方法是使用 OUTPUT 参数和 XML。下面的示例代码将演示如何以及您可以修改在 TopProcedure 中对 XML 执行的操作,以更好地处理您对错误的响应。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
USE tempdb
GO
CREATE PROCEDURE SubProcedure @RandomNumber INT, @XMLErrors XML OUTPUT
AS
BEGIN
BEGIN TRY
    IF @RandomNumber > 50
        RaisError('Bad number set!',16,1)
    ELSE
        SELECT @RandomNumber
END TRY
BEGIN CATCH
    SET @XMLErrors = (SELECT * FROM (SELECT ERROR_MESSAGE() ErrorMessage,
        ERROR_LINE() ErrorLine, ERROR_PROCEDURE() ErrorProcedure,
        ERROR_SEVERITY() ErrorSeverity) a FOR XML AUTO, ELEMENTS, ROOT('root'))
END CATCH
END
GO

CREATE PROCEDURE TopProcedure @RandomNumber INT
AS
BEGIN
    DECLARE @XMLErrors XML
    EXEC SubProcedure @RandomNumber, @XMLErrors OUTPUT
    IF @XMLErrors IS NOT NULL
        SELECT @XMLErrors
END

GO
EXEC TopProcedure 25
GO
EXEC TopProcedure 55
GO
DROP PROCEDURE TopProcedure
GO
DROP PROCEDURE SubProcedure
GO

对 TopProcedure 的初始调用将返回 25。第二次将返回一个如下所示的 XML 块:

1
2
3
4
5
6
7
8
<root>
 
    <ErrorMessage>Bad NUMBER SET!</ErrorMessage>
    <ErrorLine>6</ErrorLine>
    <ErrorProcedure>SubProcedure</ErrorProcedure>
    <ErrorSeverity>16</ErrorSeverity>
 
</root>

享受


您可以这样做的一种方法是创建一个内存表,并在捕获异常时将行插入其中。然后您将重新引发异常,链上的下一个函数将有机会处理异常或还将异常记录到内存表中。这很讨厌,但不幸的是似乎没有办法获取 T-SQL 调用堆栈:(


推荐阅读

    linux中路径修改命令?

    linux中路径修改命令?,系统,命令,首次,工作,名称,目录,文件,环境变量,路径,

    linux怎么看路径命令?

    linux怎么看路径命令?,数据,工作,系统,信息,时间,命令,文件,目录,路径,缩写,

    linux命令错误的是?

    linux命令错误的是?,系统,信息,异常,密码,工具,地址,网络,实时,状态,数据,Lin

    linux命令行路径补全?

    linux命令行路径补全?,系统,名称,软件,情况,命令,工具,智能,信息,不了,终端,l

    linux隐藏命令行路径?

    linux隐藏命令行路径?,系统,工作,信息,地址,名称,命令,标准,目录,文件夹,文

    linux路径命令符号?

    linux路径命令符号?,系统,标准,信息,数据,实时,状态,名字,环境,概念,代码,lin

    linux显示错误命令?

    linux显示错误命令?,信息,系统,电脑,状态,时间,环境,命令,搜狐,密码,异常,虚

    linux退出错误命令的?

    linux退出错误命令的?,系统,电脑,环境,命令,位置,管理,工具,设备,终端,进程,L

    linux没有该命令错误?

    linux没有该命令错误?,系统,第一,环境,命令,分析,软件,异常,文件,目录,空格,

    linux命令错误代码?

    linux命令错误代码?,系统,密码,电脑,网络,手机,网址,软件,代码,设备,老板,Lin

    linux常用的命令路径?

    linux常用的命令路径?,地址,工作,基础,网络,管理,系统,信息,命令,企业,服务,l

    linux切换路径命令行?

    linux切换路径命令行?,系统,工作,名称,地址,目录,命令,工具,密码,一致,管理,

    linux做路由跟踪命令?

    linux做路由跟踪命令?,网络,系统,地址,设备,信息,电脑,工作,命令,服务,全球,l

    linux改变命令的路径?

    linux改变命令的路径?,数字,第一,目录,工作,一致,名称,系统,命令,文件夹,代

    linux开启命令跟踪?

    linux开启命令跟踪?,系统,信息,软件,对比,工具,发行,通信,实时,状态,最新,如

    linux中显示路径命令?

    linux中显示路径命令?,系统,地址,工作,信息,时间,命令,数据,网络,路径,名字,l

    linux保存路径命令行?

    linux保存路径命令行?,状态,地址,电脑,档案,系统,底部,软件,密码,命令,文件,l

    linux相对路径命令?

    linux相对路径命令?,工作,名字,路径,目录,管理,信息,系统,位置,名称,基础,lin

    linux多路径查看命令?

    linux多路径查看命令?,设备,软件,网络,工具,系统,情况,下降,公司,名称,大幅,

    linux路径命令解释?

    linux路径命令解释?,系统,信息,设备,数据,工具,命令,文件,标准,发行,时间,lin