2010-08-16 64 views
1

所以我編寫了幾個存儲過程,這些存儲過程通過輸入一個ID號來處理單個數據行。我想保留幾個存儲過程,可以在我的數據庫方案的不同級別調用此存儲過程。例如,當插入一行時,我調用這個存儲過程。當別的東西被修改時,我想爲每一行調用這個存儲過程。這樣我就可以擁有一組可以在其他地方調用的基本代碼,但是這些基本代碼會對不同數量的數據起作用。我已經能夠用光標產生這個結果,但我被告知這些效率非常低。有沒有其他的方式來產生這種功能而不犧牲性能?謝謝。T-SQL優化各種存儲過程的性能問題

+0

鮑勃,當你說「行事」你是什麼意思?你審計的行動?您是否通過這些程序更新了參照完整性? – 2010-08-16 04:22:03

回答

1

是的。使用標準連接在集合上操作而不是在RBAR(行通過Agonizing Row)上操作。即不是爲每一行調用一個函數,而是設計一個連接,作爲設置操作對每一個適用的行執行所需的操作。

我經常看到devs使用'函數在每一行上運行',雖然這似乎是封裝邏輯的一種明顯方式,但它在SQL Server或大多數數據庫引擎上表現不佳。

在某些情況下,可以有效地使用表值函數(MS SQL Server)。

(順便說一句,你說的光標效率不高)。

+0

嗯,我以爲你無法在select語句中調用存儲過程。我怎樣才能使用一個存儲過程來接收ID號並在連接中調用它?謝謝。 – 2010-08-16 00:33:18

+0

@Bob L:我建議你不要。 – 2010-08-16 00:39:11

+0

我明白了......所以讓它成爲一個函數或什麼東西? – 2010-08-16 00:39:42