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