我一直在研究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
答案 0 :(得分:1)
尝试做的最简单方法是将@ErrMsg声明为过程的输出参数,并在调用应用程序中处理它。
如果您希望继续使用它来处理错误输出,您可以阅读RAISEERROR如何处理它的输出。 http://msdn.microsoft.com/en-us/library/ms178592.aspx