Use*_*ser 3 stored-procedures sql-server-2005 return raiserror
我有一个存储过程PROC,它接收一些参数.如果其中一个@ID不是null PROC_A,则必须执行给定的存储过程.否则,PROC_B必须执行.问题是它们都可以发出一个RAISERROR,我希望通过调用堆栈传播,以便在客户端应用程序中显示.但是,这RAISERROR不会停止PROC存储过程的其余部分,因为我使用的是IF子句,因此检查IF ( @@ERROR <> 0 ) RETURN也不是一种选择.我唯一的选择似乎是使用一个TRY...CATCH块来包装IF子句并RAISERROR从CATCH块中重新抛出from ,这很麻烦因为那时我将不得不缓存ERROR_MESSAGE(),ERROR_SEVERITY()并 再次ERROR_STATE()使用RAISERROR.
真的没有更优雅的方式吗?
只需使用一个TRY - CATCH块并回显原始错误,这并不难:
BEGIN TRY
--used in the CATCH block to echo the error back
DECLARE @ErrorMessage nvarchar(400), @ErrorNumber int, @ErrorSeverity int, @ErrorState int, @ErrorLine int
--Your stuff here
END TRY
BEGIN CATCH
--your error code/logging here
--will echo back the complete original error message
SELECT @ErrorMessage = N'Error %d, Line %d, Message: '+ERROR_MESSAGE(),@ErrorNumber = ERROR_NUMBER(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE(),@ErrorLine = ERROR_LINE()
RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState, @ErrorNumber,@ErrorLine)
END CATCH
Run Code Online (Sandbox Code Playgroud)
此外,最好将整个过程放在一个TRY - CATCH,而不仅仅是外部过程调用.
| 归档时间: |
|
| 查看次数: |
6380 次 |
| 最近记录: |