इसे पूरा करने के कई तरीके हैं:
-
डायनेमिक SQL, जैसा कि इस लेख में बताया गया है:http://asheej.blogspot.com/2012/04/how-to-use-ms-sql-in-clause-with.html
-
प्रत्येक आइटम को चर में निर्दिष्ट करें (यदि आपके पास बहुत कुछ है तो यह काफी बदसूरत हो सकता है):
@var1 varchar(20),@var2 varchar(20),@var3 varchar(20)
-
स्ट्रिंग को टेबल वेरिएबल में बदलने के लिए स्प्लिट फंक्शन लिखें, उनमें से कई हैं। यह मेरा निजी पसंदीदा है:http://dataeducation.com/faster -मोर-स्केलेबल-एसक्लक्लर-स्ट्रिंग-स्प्लिटिंग/
-
तालिका मान पैरामीटर का उपयोग करें (2008):http://www.techrepublic.com/blog/datacenter/passing-table-valued-parameters-in-sql-server-2008/168
-
यहाँ CHARINDEX का उपयोग करते हुए एक छोटी सी तरकीब दी गई है (ध्यान दें कि यह दृष्टिकोण गैर-साध्य है):
आपकी स्ट्रिंग इस प्रकार है:'abc,def'
CHARINDEX
Using का उपयोग करना , आप खोज स्ट्रिंग और मान दोनों को पैड करते हैं जिसे आप अपने डिलीमीटर के साथ खोज स्ट्रिंग में खोजना चाहते हैं। तो मेरे छोटे से उदाहरण का उपयोग करते हुए, स्ट्रिंग ', एबीसी, डीईएफ़' बन जाएगी, शुरुआत और अंत में अतिरिक्त अल्पविरामों पर ध्यान दें। फिर फ़ील्ड डेटा के साथ भी ऐसा ही करें। अगर आपके डेटा में कॉमा हैं, तो आपको डिलीमीटर को किसी और चीज़ से बदलना होगा, जैसे कि char(2), या सेमी-कोलन, या जो भी हो।
फिर खोज करने के लिए:
WHERE CHARINDEX ( ',' + expressionToFind + ',' , ',' + expressionToSearch ',') > 0
सीमांकक पैडिंग खोज को "abcabc" खोजने से रोकता है लेकिन "abc", सटीक मिलान ढूंढेगा।
यदि आप 2005 का उपयोग कर रहे हैं, तो मैं वास्तव में एक तेज़ स्प्लिट फ़ंक्शन प्राप्त करूंगा ताकि आप गतिशील SQL का उपयोग करने से बच सकें।