我一直在研究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
你能告訴我們你的CATCH塊嗎?另外你的客戶是什麼? –
也許這可能有助於>>>>>> http://stackoverflow.com/q/16046065/2287960 – BrianBurkill