2014-01-07 53 views
0

我這是應該做到以下幾點存儲過程的每一行: -的SQL Server 2008 - 最佳實踐來調用存儲過程爲表

  1. 執行業務邏輯和選擇的訂閱ID的列表。
  2. 對於上述選擇的每一行,請調用單獨的存儲過程以獲取爲該特定訂閱ID訂閱的代理列表。
  3. 將結果插入兩個其他表中。

現在,我已經使用While循環的第2點,並使用IF條件語句來爲不同的訂閱ID調用不同的SP。

注意: - 在第二步中調用的存儲過程的名稱是動態的,因訂閱ID而異。儘管不同的SP返回的結構相同。我無法控制這些程序,也無法將這些過程轉換爲TVF,因此實施交叉應用(如果達到目的)將是一個問題。

我的問題是,有什麼辦法可以避免這種迭代方法,並通過遵循基於集合的方法來實現相同的功能?

+1

您無法真正將存儲過程組合成更大的查詢,並且您排除了通常的建議(轉換爲TVF,保留一個只調用TVF的存儲過程包裝函數,以便其他用戶不受影響) –

+0

恕我直言,在這種情況下我能做的最好的事情就是創建一個包裝函數,它實際上根據Subscription ID調用存儲過程。所以,我的調用順序是我的存儲過程 - > TVF(訂閱ID) - >其他存儲過程(訂閱ID)。真的很想知道是否有比上述做法更好的解決方案。 – Abhirup

+0

TVF無法調用存儲的特效 - 只能以其他方式調用。存儲過程幾乎就是行結束 - 它們可以使用所有其他SQL Server對象,但大多數其他SQL Server對象不能使用存儲的過程。 –

回答

0

在我解釋了最佳實踐以及在第2點將存儲過程轉換爲TVF的需求後,客戶已同意,因此現在使用TVF和Cross Apply解決了問題。謝謝。