2012-09-18 36 views
1

我一直在研究TRY/CATCH塊,並且我有點難以按照需要的方式傳遞錯誤。從我讀過的內容以及如果我理解正確的話,SQL中CATCH塊中的RAISERROR將傳遞給調用批處理或調用應用程序。應用程序正在運行一個存儲過程,其中有一個事務。交易包裹在TRY/CATCH塊中。在CATCH塊中,如果事務中的某些內容失敗導致它跳轉到CATCH,我會引發錯誤。如果通過SSMS運行該過程,錯誤顯示正常並且事務回滾。但是,如果應用程序調用存儲過程併發生相同的錯誤,那麼應用程序永遠不會知道錯誤,因此現在不會失敗。從TSQL中的捕獲塊傳遞到調用批次的RAISERROR - 需要傳遞給調用應用程序

首先,我能正確理解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

你能告訴我們你的CATCH塊嗎?另外你的客戶是什麼? –

+0

也許這可能有助於>>>>>> http://stackoverflow.com/q/16046065/2287960 – BrianBurkill

回答

1

做什麼你試圖做會宣佈@ErrMsg爲你的程序的輸出參數和處理,在您的調用應用程序的最簡單方法。

如果您想繼續使用它來處理錯誤輸出,您可以閱讀RAISEERROR如何處理它的輸出。 http://msdn.microsoft.com/en-us/library/ms178592.aspx