Er zijn een paar manieren om dit te doen. U kunt de parameter doorgeven als een XML-blob zoals in dit voorbeeld:
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>'
Of geef de waarden door als CSV en gebruik een splitfunctie om de waarden op te splitsen in een tabelvariabele (er zijn veel splitfuncties beschikbaar, snel zoeken levert er een op).
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'
Als u SQL 2008 of later gebruikte, had u Table Valued Parameters kunnen gebruiken waarmee u een TABLE-variabele als parameter kunt doorgeven. Ik heb geblogd over deze 3 benaderingen een tijdje terug, met een snelle prestatievergelijking.