2013-01-15 54 views
3

我讀過使用SQL Server存儲過程中的Try Catch塊可以播放大量服務器資源。我的問題是它使用了多少資源?嘗試追趕 - 資源密集度?

我目前使用Try Catch塊和事務,只要我的sproc進行大量數據更改,這對於防止不正確的數據進入數據庫以及記錄錯誤非常有用,但是我想使在我所有的sprocs中使用這種編程方法。

如何存在很大差異。它做什麼呢?

+1

你從哪裏讀到的?你有鏈接嗎? –

+0

我已經做了一些測試,在這個 - 見http://www.sqlperformance.com/2012/08/t-sql-queries/error-handling –

+0

我讀過一本書回來時,我在大學,雖然不記得確切的名字。 它確實有道理,它將需要一些資源來檢查錯誤,但我只是想知道多少。 – JAT

回答

6

零。使用TRY/CATCH的代碼消耗與不使用TRY/CATCH的代碼完全相同的資源,唯一的區別是前者通常比後者更正確。事實上TRY/CATCH代碼是更高效在錯誤的存在作爲代碼流直跳轉到catch塊,並避免運行在請求/存儲過程中的語句的剩餘部分僅回滾末。

只是爲了記錄,我不買一秒鐘,寫的代碼,每個語句是甚至遠程後檢查@@ ERROR一個可行的選擇。

我讀過一本書回來時,我在大學

爲了確認讀數並未提及與try/catch語句的T-SQL代碼,而是所指的C++代碼或無一例外(JVM或IL)。回到黑暗時代,對於添加異常處理代碼是否具有性能影響(是的,它具有)以及我們是否應該考慮這個因素存在爭議(不,我們不應該,使用異常處理的代碼早已贏得了由於正確性)。但是對於您的觀點來說,這種討論是毫無用處的:運行您的T-SQL的後端引擎會進行異常處理編譯,並且您無能爲力。再次,這對您的T-SQL代碼沒有影響。

+0

謝謝。我喜歡在我的腳本中使用Try Catch,但由於我們處理的交易量很高,我們總是被告知不要使用它。我的邏輯還告訴我,在錯誤發生後立即結束腳本會更有效,而不必首先查詢@@ ERROR。 謝謝 – JAT

+0

不知何故相關:http://rusanu.com/2009/06/11/exception-handling-and-nested-transactions/ –