我一直在研究 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
执行您尝试执行的操作的最简单方法是将 @ErrMsg 声明为过程的输出参数,并在调用应用程序中处理它。
如果您希望继续使用 RAISEERROR 处理错误输出,您可以在此处阅读 RAISEERROR 如何处理其输出。 http://msdn.microsoft.com/en-us/library/ms178592.aspx
我猜这里需要的是THROW