2011-04-20 70 views
0

我想从外部存储过程中获取由存储过程导致的错误集合。有没有办法解决这个问题。Sql Server 2008尝试抓取错误集合

样品如下。我得到的第一个错误80125.我也想获得关于第二个80054.信息是否有SQL Server中的集合或服务器变量(我不知道如何从净得到这个)


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;工作站:企业 - 歧义错误解决 - 以下错误是由第五可能无效的参数引起


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

你的意思是2005年,如在标签中,还是2008年,如标题中所示? – 2011-04-20 20:33:01

回答

1

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

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

+0

谢谢你的细节 – 2011-04-21 15:58:36