sql-server-2005 - SQL Server 2008 try catch 错误收集

标签 sql-server-2005 error-handling

我想从外部存储过程中获取由存储过程引起的错误集合。有没有办法做到这一点。

示例如下。我收到第一个错误80125。我也想获得有关第二个错误80054的信息。sql server中是否有集合或服务器变量(我确实知道如何从.Net中获得此信息)

BEGIN TRY

DECLARE @RC int

EXEC @RC= TestErrorProc

END TRY


BEGIN CATCH

   SELECT

    ERROR_NUMBER() AS ErrorNumber,ERROR_SEVERITY() AS ErrorSeverity

    ,ERROR_STATE() AS ErrorState    ,ERROR_PROCEDURE() AS ErrorProcedure

    ,ERROR_LINE() AS ErrorLine    ,ERROR_MESSAGE() AS ErrorMessage

END CATCH

-给出以下
80125 15 1 TestErrorProc 11数据库自定义错误:Procedure:PROCEDURENAME;用户:dbo;工作站:VENTURE-模棱两可的错误解决方案-以下错误是由第五个可能无效的参数引起的
CREATE PROCEDURE [dbo].[TestErrorProc]

AS

    DECLARE @intErr int, @intRows int, @strUser varchar(64), @strWks varchar(64)

    DECLARE @strTraceMsg varchar(255)

    DECLARE @intRet int

    SELECT @strUser = USER_NAME(), @strWks = HOST_NAME()

    SET @strTraceMsg = ' Row 1'

       BEGIN

       --Ambiguous Testing

        RAISERROR( 80125, 15, 1, 'PROCEDURENAME', @strUser, @strWks, 'TABLENAME-Column information' )
          RAISERROR( 80054, 15, 1, 'PROCEDURENAME', @strUser, @strWks, @strTraceMsg, 'Issue details - business Error' )

        RETURN( -100 )

      END

最佳答案

没有更多代码,这是不可能的-引发第一个错误后,内部过程将退出,并执行CATCH块中的代码。

如果需要在返回到外部代码之前捕获多个错误,一种解决方案是在内部过程中编写更复杂的错误处理,将每个错误包装在自己的TRY...CATCH块中,然后将这些错误插入临时表中。引发新错误以将控制权返回给外部代码,该外部代码可以检索并显示临时表的内容。这种方法应该可行,但可能很难维护。

关于sql-server-2005 - SQL Server 2008 try catch 错误收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5735694/

相关文章:

sql-server-2005 - SSIS 中的 Oracle 到 SQL 2005 DATETIME 字段溢出

sql - 删除 SQL Server 中的重复项 - 异常场景

laravel - 如何在 Laravel Validator 中仅显示错误消息

Java 不变异常

javascript - 在 Node.js 中,如何确定子进程是否已正常启动?

sql-server-2005 - Sql 子查询\函数的性能

java - 如何从java代码启动sql server代理作业

sql - 根据 ID 连接值

error-handling - 如何在Odoo中调试错误消息

error-handling - 将 .NET Framework 4.5 的 System.IO.FileSystemWatcher 的设置配置为可就错误、容错、健壮、智能等进行交流