2
我有一個存儲過程,PROC
,它接收一些參數。如果其中的一個@ID
不爲空,則必須執行給定的存儲過程PROC_A
。否則,必須執行PROC_B
。問題是它們都可能發出RAISERROR
,我想通過調用堆棧傳播以顯示在客戶端應用程序中。但是,RAISERROR
不會像其應該的那樣停止PROC
存儲過程的其餘部分,並且由於我使用的是IF
子句,因此檢查IF (@@ERROR <> 0) RETURN
也不是一個選項。我唯一的選擇似乎是使用TRY...CATCH
塊包裹IF
條款,並從CATCH
塊,這是捉襟見肘內再次引發RAISERROR
因爲那時我將不得不緩存ERROR_MESSAGE()
,ERROR_SEVERITY()
和ERROR_STATE()
並再次使用RAISERROR
。IF,RAISERROR&RETURN中的存儲過程
難道真的沒有更優雅的方式嗎?
+1我將無恥地鏈接到我的模板http://stackoverflow.com/questions/2073737/nested-stored-procedures-containing-try-catch-rollback-pattern/2074139#2074139 – gbn