मुझे पता है कि यह वास्तविक प्रश्न का उत्तर नहीं देता है, लेकिन मैंने इसे संभालने के लिए जो भी समाधान देखे हैं, वे एक प्रक्रिया में एकाधिक मानों को पारित करने में सक्षम नहीं होने की पिछली सीमाओं को प्राप्त करने के लिए एक गंदे हैक की तरह महसूस करते हैं। एसक्यूएल-सर्वर 2008 में तालिका मूल्यवान पैरामीटर की शुरूआत के बाद से मुझे कोई कारण नहीं दिख रहा है कि एसक्यूएल के भीतर एक सीमित स्ट्रिंग की आवश्यकता क्यों होगी:
मान रखने के लिए अपना प्रकार बनाना पहला कदम है (मैं सामान्य नामों का उपयोग करता हूं ताकि उनका पुन:उपयोग किया जा सके):
CREATE TYPE dbo.StringList AS TABLE (Value NVARCHAR(MAX));
फिर अपनी प्रक्रिया बनाएं:
CREATE PROCEDURE dbo.GetFromTable @OrgList dbo.StringList READONLY
AS
SELECT Something
FROM MyTable
WHERE Org + '-' + OrgSub IN (SELECT Value FROM @OrgList);
GO
फिर आप अपनी प्रक्रिया को इस प्रकार कॉल कर सकते हैं
DECLARE @OrgList dbo.StringList;
INSERT @OrgList VALUES
('2342342', '________', 'A'),
('5435354', '________', 'B');
EXECUTE dbo.GetFromTable @OrgList;
यह अधिक उपयुक्त तालिका बनाने की संभावना को भी वहन करेगा:
CREATE TYPE dbo.OrgList AS TABLE(Org VARCHAR(10), OrgSub VARCHAR(10));
CREATE PROCEDURE dbo.GetFromTable @OrgList dbo.OrgList READONLY
AS
SELECT Something
FROM MyTable
WHERE EXISTS
( SELECT 1
FROM @OrgList O
WHERE MyTable.Org = o.Org
AND MyTable.OrgSub = o.OrgSub
);
GO
फिर निष्पादित करने के लिए
DECLARE @OrgList dbo.OrgList;
INSERT @OrgList VALUES
('2342342', '________'),
('5435354', '________');
EXECUTE dbo.GetFromTable @OrgList;
यदि अल्पविराम सीमांकित सूची को पारित करने के लिए बिल्कुल आवश्यक है, तो आप इसे एक्सएमएल रूपांतरण का उपयोग करके स्ट्रिंगलिस्ट प्रकार में परिवर्तित कर सकते हैं, और उसी प्रक्रिया का उपयोग कर सकते हैं, लेकिन तालिका मूल्यवान पैरामीटर का उपयोग करने से सीमांकित स्ट्रिंग का उपयोग करने से कहीं अधिक लचीलेपन की अनुमति मिलती है:
DECLARE @S VARCHAR(MAX) = '2342342-________,5435354-________,_______-________';
DECLARE @OrgList dbo.StringList;
INSERT @OrgList
SELECT Y.value('.', 'NVARCHAR(MAX)')
FROM (SELECT [X] = CAST(('<X>' + REPLACE(@S, ',' ,'</X><X>')+'</X>') AS XML)) X
CROSS APPLY X.nodes('X') AS y (Y)
EXECUTE GetFromTable @OrgList