TSQL 中的 Catch 块中的 RAISERROR 传递到调用批处理 - 需要将其传递到调用应用程序

问题描述 投票:0回答:2

我一直在研究 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

sql t-sql sql-server-2005 try-catch raiserror
2个回答
1
投票

执行您尝试执行的操作的最简单方法是将 @ErrMsg 声明为过程的输出参数,并在调用应用程序中处理它。

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


0
投票

我猜这里需要的是THROW

© www.soinside.com 2019 - 2024. All rights reserved.