आप इसे अल्पविराम से अलग की गई सूची के रूप में पास कर सकते हैं, फिर स्प्लिट फ़ंक्शन का उपयोग कर सकते हैं, और परिणामों के विरुद्ध शामिल हो सकते हैं।
CREATE FUNCTION dbo.SplitInts
(
@List VARCHAR(MAX),
@Delimiter CHAR(1)
)
RETURNS TABLE
AS
RETURN
(
SELECT Item = CONVERT(INT, Item)
FROM
(
SELECT Item = x.i.value('(./text())[1]', 'INT')
FROM
(
SELECT [XML] = CONVERT(XML, '<i>'
+ REPLACE(@List, @Delimiter, '</i><i>')
+ '</i>').query('.')
) AS a
CROSS APPLY
[XML].nodes('i') AS x(i)
) AS y
WHERE Item IS NOT NULL
);
अब आपकी संग्रहित प्रक्रिया:
CREATE PROCEDURE dbo.doStuff
@List VARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
SELECT cols FROM dbo.table AS t
INNER JOIN dbo.SplitInts(@List, ',') AS list
ON t.ID = list.Item;
END
GO
फिर इसे कॉल करने के लिए:
EXEC dbo.doStuff @List = '1, 2, 3, ...';
आप यहां कुछ पृष्ठभूमि, अन्य विकल्प और प्रदर्शन तुलना देख सकते हैं:
- स्ट्रिंग्स को सही तरीके से विभाजित करें - या अगला सर्वश्रेष्ठ रास्ता
- स्प्लिटिंग स्ट्रिंग्स :ए फॉलो-अपए>
- स्प्लिटिंग स्ट्रिंग्स :अब कम टी-एसक्यूएल के साथ
- स्ट्रिंग विभाजन / संयोजन विधियों की तुलना करना
- पूर्णांकों की सूची प्रोसेस करना :मेरा दृष्टिकोण
- पूर्णांकों की सूची विभाजित करना :एक और राउंडअप
- विभाजन सूचियों के बारे में अधिक जानकारी :कस्टम सीमांकक, डुप्लिकेट को रोकना, और व्यवस्था बनाए रखना
- हटाना SQL सर्वर में स्ट्रिंग्स से डुप्लीकेट
SQL सर्वर 2016 या इसके बाद के संस्करण पर, आपको STRING_SPLIT()
और STRING_AGG()
:
- प्रदर्शन आश्चर्य और अनुमान :STRING_SPLIT() SQL सर्वर में
- STRING_SPLIT() 2016 :फॉलो-अप #1 SQL सर्वर में
- STRING_SPLIT() 2016 :फॉलो-अप #2
- SQL सर्वर v.अगला :STRING_AGG() प्रदर्शन
- SQL सर्वर के नए STRING_AGG और STRING_SPLIT फ़ंक्शन के साथ पुरानी समस्याओं का समाधान करें