1

我一直在研究 TRY/CATCH 块,我对如何以我需要的方式传递错误有点困惑。从我读过的内容来看,如果我理解正确,SQL 中的 CATCH 块中的 RAISERROR 将被传递给调用批处理或调用应用程序。该应用程序正在运行一个存储过程,其中包含一个事务。该事务被包装在一个 TRY/CATCH 块中。在 CATCH 块中,如果事务中的某些内容失败导致它跳转到 CATCH,我将引发错误。如果通过 SSMS 运行该过程,则错误显示正常并且事务回滚。但是,如果应用程序调用存储过程并发生相同的错误,则应用程序永远不会知道错误,因此现在过程不会失败。

首先,我是否正确理解了 CATCH 中的 RAISERROR 是如何工作的?如果是这样,我怎样才能将该错误引发回调用应用程序?

BEGIN TRY 
    BEGIN TRAN 
        ............... 
    COMMIT 
END TRY 
BEGIN CATCH 
    IF @@TRANCOUNT > 0 
        ROLLBACK 
    DECLARE @ErrMsg NVARCHAR(4000) 
    SELECT @ErrMsg = ERROR_MESSAGE() 
    RAISERROR(@ErrMsg, 16, 1) 
END CATCH 

我正在运行 Windows 7、SQL Server 2005

4

1 回答 1

1

做你想做的最简单的方法是将@ErrMsg 声明为你的过程的输出参数并在你的调用应用程序中处理它。

如果您希望继续使用 RAISEERROR 来处理错误输出,可以在此处阅读有关 RAISEERROR 如何处理其输出的信息。http://msdn.microsoft.com/en-us/library/ms178592.aspx

于 2012-09-21T04:27:38.357 回答