Sql Server 2008尝试捕获错误集合

时间:2011-04-20 19:38:39

标签: 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数据库自定义错误:过程: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

1 个答案:

答案 0 :(得分:1)

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

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