2010-03-23 90 views
0

添加異常處理是一種很好的做法,但我有一個疑問,在我們的數據庫中,我們有10個SP,它們被我們的數據訪問層訪問,邏輯不多,查詢也不大。保留SP中的查詢允許將分頁數據輕鬆地傳遞到表示層。所以,我的問題是,如果錯誤處理在這種情況下被添加到SP中,但它們不包含大型複雜查詢?SQl存儲過程中的異常處理?

回答

2

大多數分頁查詢應該是一個單一的SELECT陳述,或者兩個,如果你與SET ROWCOUNT優化/ LIMIT。我不認爲在這個實例中可能發生的任何錯誤都可以從數據庫中處理。

通常,在數據庫級別實現錯誤處理的主要原因是將其與事務邏輯相結合,以便在必要時在適當的時間回滾正確的更改。如果你實際上沒有執行任何DML,我真的沒有看到編寫特殊錯誤處理代碼的好理由。

當然你還沒有在這裏我們展示的查詢要麼...如果你寫某種多語句DML在那裏,然後撇開事實,這是一個奇怪的事情在做分頁查詢,你會想要進行某種錯誤處理。與查詢不重要的是大小,而是查詢所做的;如果你正在對數據做修改,那麼你應該考慮實現錯誤處理,但是如果沒有,那麼我沒有看到任何好的理由。

+0

我會說你使用每個存儲過程的模板,無論是否進行數據更改。在將來,如果你想在更新過程中重新使用這個選擇過程呢?如果計數/分配溢出選擇中的局部變量會怎麼樣?包含它就像排除它一樣容易,不是嗎? – gbn 2010-03-23 06:39:42

+0

@gbn:也許這只是因爲我鄙視SSMS模板系統(與VS代碼片段相比),但這對我來說似乎是不必要的工作。我們大多數人並沒有在應用程序代碼中所做的每件事情上都癡迷於編寫try-catch塊,所以我不明白爲什麼它只需要一個'SELECT'語句就可以完成,我想不出來任何情況下,我已經在另一個程序中重複使用了「SELECT」過程。我也認爲不太可能發生「報告」程序改變以進行修改;如果發生這種情況,請添加異常處理,很簡單。 – Aaronaught 2010-03-23 14:16:23

3

是的。

TRY/CATCH將捕獲錯誤,否則會導致存儲的proc運行停止,例如數據類型轉換錯誤。它也可以讓你記錄錯誤在catch塊,例如,或重試(例如已PROC稱自己)