इसे करने के कुछ तरीके हैं। आप इस उदाहरण की तरह एक XML ब्लॉब के रूप में पैरामीटर में पास कर सकते हैं:
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 या बाद के संस्करण का उपयोग कर रहे थे, तो आप टेबल वैल्यूड पैरामीटर्स का उपयोग कर सकते थे जो आपको एक पैरामीटर के रूप में एक टेबल वैरिएबल पास करने की अनुमति देता है। मैंने ब्लॉग किया त्वरित प्रदर्शन तुलना के साथ इन 3 दृष्टिकोणों के बारे में कुछ समय पहले।