2009-01-19 51 views
12

代碼重用和模塊化是SQL存儲過程編程的一個好主意嗎?SQL中的代碼重用和模塊化

如果是這樣,將這些功能添加到SQL存儲過程代碼庫的最佳方法是什麼?

我通常爲常見和重複的任務創建標量值函數。我發現它可以減輕與現有程序類似的新程序的開發,但也有助於錯誤跟蹤和故障排除。

儘管由於性能問題,我儘量遠離表值函數。

我的經驗法則是,如果它是一個計算,並且它在幾個地方使用,那麼我創建一個標量值函數。

回答

2

在代碼重用方面,Sql並沒有提供很多靈活性。當涉及到計算或其他不涉及修改表的任務時,我通常會創建函數。但是涉及寫入表的所有任務以及我通常使用存儲過程來更好地控制事務的事情。

0

從應用程序端查看它的另一種方法是使用綁定來重用您的SQL查詢。但是,這可能不是你想要的

1

你可以將代碼分解成單獨的存儲過程,以幫助將複雜的存儲過程分解爲更易於管理的塊。你也可以做同樣的事情來分解那些不起作用的通用邏輯。可以把它看作與Extract Method重構類似。

+0

將一個大sp分成幾個小sp的問題是,它們只能嵌套到一個級別。 – jandersson 2009-01-19 15:02:27

5

你會發現在你的查詢中使用函數是性能的災難。這些函數成爲優化器的黑盒子,所以您最終會將函數調用重新編碼到查詢中,以便在表中獲得大量行時使其快速運行。

處理常見計算的更好方法是使用觸發器或插入/更新查詢將它們插入到新列中。這樣,您可以將計算出的值編入索引並直接使用它,而不是在每次需要時將其計算出來。

0

爲了跟上這一點,我遇到了一些性能問題,並且似乎優化器無法爲函數內的代碼選擇正確的索引。

所以我不得不使用索引提示(帶關鍵字)來指定正確的索引,以解決性能問題。