2013-02-07 312 views
1

我希望能夠查詢多個相同類型的參數(例如,多個ID,只是爲了保持示例簡單),所以我只需要執行一次而不是一次爲每個個人ID。在我的單實例過程返回的地方,比如說,一個名字,我的get-all proc將返回一個單列的名稱表。將幾個查詢合併成一個

我現在擁有的一切:

EXEC MyProc(123); 
EXEC MyProc(456); 
EXEC MyProc(789); 

我想什麼:

// Square brackets aren't correct syntax, 
// they just represent a list that contains x number of IDs 
EXEC MyProc([123, 456, 789]); 

我能做到這一點,如果是這樣,有一個簡單的機制,用於處理那些沒有按」這樣的事情t涉及遊標和各種過度複雜的東西?這甚至會被認爲是一個好主意嗎?

+2

請參閱[Sommarskog關於數組的文章](http://www.sommarskog.se/arrays-in-sql.html)表值參數非常簡單且功能強大,XML列表參數往往具有最佳性能。 – Andomar

回答

0

要執行proc只有一次,您必須重構您的proc以使用多個ID,因爲沒有T-SQL函數或語法糖爲您執行此操作。

如果這是可變的,因爲可能有一個或多個ID,您必須在一個參數中將多個ID傳遞給您的proc。在更新版本的SQL Server中,這種排序數組的傳遞可能更容易。

例如,你可以嘗試傳:

  • TVPs在SQL Server 2008+
  • 分隔字符串,然後在proc
  • XML,然後在proc解析分裂
  • 一個表名,然後由proc動態讀取
  • 使用預先知道的表名和處理函數

對傳遞數組的快速搜索是SQL Server將產生更多結果,其中最好的就是@Andomar提到的Arrays and Lists in SQL Server