TSQL中Catch Block的RAISERROR通过调用批处理 - 需要通过调用应用程序

时间:2012-09-18 21:21:30

标签: sql tsql sql-server-2005 try-catch raiserror

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

1 个答案:

答案 0 :(得分:1)

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

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