इसके काम न करने का कारण यह है कि @P1 को एक, एकल मान के रूप में माना जाता है।
जैसे जब @ कोड X101,B202 है तो क्वेरी को केवल इस प्रकार चलाया जा रहा है:तालिका से चुनें * जहां क्षेत्र कोड ('X101, B202') तो, यह एक क्षेत्र कोड की तलाश में है जो @ पी 1 के साथ निहित है। यहां तक कि जब आप सिंगल कोट्स शामिल करते हैं, तो इसका मतलब यह है कि वह रीजनकोड में जो वैल्यू खोजता है, उसमें वे सिंगल कोट्स शामिल होने की उम्मीद है।
जिस तरह से आप सोच रहे हैं उसे काम करने के लिए आपको वास्तव में @Code वैरिएबल को @Cmd sql कमांड टेक्स्ट में जोड़ना होगा:
SET @Code = '''X101'',''B202'''
SET @Cmd = 'SELECT * FROM Table WHERE RegionCode IN (' + @Code + ')'
EXECUTE (@Cmd)
जाहिर है, हालांकि, यह आपको केवल SQL इंजेक्शन के लिए खोलता है, इसलिए यदि आप यह सुनिश्चित करने के लिए इस दृष्टिकोण को अपनाते हैं तो आपको बहुत सावधान रहने की आवश्यकता होगी।
इस स्थिति से निपटने के वैकल्पिक तरीके हैं जहां आप खोजने के लिए मूल्यों की एक गतिशील सूची में पास करना चाहते हैं।
my ब्लॉग पर उदाहरण देखें 2 दृष्टिकोणों के लिए आप SQL सर्वर 2005 के साथ उपयोग कर सकते हैं। एक में "Value1, Value2, Value3" के रूप में CSV सूची में पास करना शामिल है, जिसे आप उपयोगकर्ता परिभाषित फ़ंक्शन का उपयोग करके एक TABLE चर में विभाजित करते हैं (इसमें बहुत सारे उल्लेख हैं) दृष्टिकोण यदि आप एक त्वरित Google या इस साइट की खोज करते हैं)। एक बार अलग हो जाने के बाद, आप उस तालिका संस्करण को अपनी मुख्य क्वेरी में शामिल कर लेते हैं। दूसरा तरीका एक एक्सएमएल ब्लॉब में पास करना है जिसमें मान शामिल हैं और एसक्यूएल सर्वर की अंतर्निहित एक्सएमएल कार्यक्षमता का उपयोग करना है। इन दोनों दृष्टिकोणों को उस लिंक में प्रदर्शन मीट्रिक के साथ प्रदर्शित किया जाता है, और उन्हें किसी गतिशील SQL की आवश्यकता नहीं होती है।
यदि आप SQL Server 2008 का उपयोग कर रहे थे, तो तालिका मान पैरामीटर जाने का रास्ता होगा - यह वह तीसरा दृष्टिकोण है जिसे मैं उस लिंक में प्रदर्शित करता हूं जो सबसे अच्छा आता है।