有幾種方法可以做到這一點。 你可以在參數傳遞作爲XML的blob這樣的例子:
CREATE PROCEDURE [dbo].[uspGetCustomersXML]
@CustomerIDs XML
AS
BEGIN
SELECT c.ID, c.Name
FROM [dbo].[Customer] c
JOIN @CustomerIDs.nodes('IDList/ID') AS x(Item) ON c.ID = Item.value('.', 'int')
END
GO
--Example Use:
EXECUTE [dbo].[uspGetCustomersXML] '<IDList><ID>1</ID><ID>10</ID><ID>100</ID></IDList>'
或者傳中值作爲CSV和使用拆分函數的值進行分成表變量(有很多的分裂功能在那裏,快速搜索會拋出一個)。
CREATE PROCEDURE [dbo].[uspGetCustomersCSV]
@CustomerIDs VARCHAR(8000)
AS
BEGIN
SELECT c.Id, c.Name
FROM [dbo].[Customer] c
JOIN dbo.fnSplit(@CustomerIDs, ',') t ON c.Id = t.item
END
GO
--Example Use:
EXECUTE [dbo].[uspGetCustomersCSV] '1,10,100'
如果您使用SQL 2008或更高版本,你也可以使用表值參數,讓你通過一個表變量作爲參數。 I blogged關於這三種方法的回顧,以及快速的性能比較。
請參閱http://stackoverflow.com/questions/878833/passing-a-varchar-full-of-comma-delimited-values-to-a-sql-server-in-function(或使用位掩碼) – 2011-01-07 10:16:25