यदि संभव हो, तो इस तरह की चीजों के लिए varchar का उपयोग न करें, तालिका का उपयोग करें। मूल्यवान पैरामीटर इसके बजाय।
तालिकाबद्ध मान पैरामीटर का उपयोग करने के लिए आपको पहले एक उपयोगकर्ता परिभाषित तालिका प्रकार घोषित करना चाहिए:
CREATE TYPE IntList As Table
(
IntValue int
)
फिर nvarchar के बजाय इस चर को स्वीकार करने के लिए अपनी संग्रहीत कार्यविधि को बदलें:
create proc Sp_ReturnPrdoucts
@BrandIds dbo.IntList readonly -- Note: readonly is a must!
AS
BEGIN
SELECT *
FROM tbl_Products as p
join tbl_Brands b on p.ProductBrandId=b.BrandId
join @BrandIds ON(b.BrandId = IntValue)
END
समस्या यह है कि IN()
ऑपरेटर अल्पविराम से अलग किए गए चरों की सूची की अपेक्षा करता है, जबकि आप एक एकल चर प्रदान करते हैं कि इसका मान अल्पविराम से अलग की गई स्ट्रिंग है।
यदि आप तालिका मान पैरामीटर का उपयोग नहीं कर सकते हैं, तो आप वर्चर के मान को इनट्स की तालिका में बदलने के लिए एसक्यूएल में एक स्ट्रिंग स्प्लिटिंग फ़ंक्शन का उपयोग कर सकते हैं। वहाँ कई स्प्लिटर्स हैं, मैं इस लेख को पढ़ने की सलाह दूंगा। ए> किसी एक को चुनने से पहले।