Er zijn verschillende manieren om dit te bereiken:
-
Dynamische SQL, zoals aangegeven in dit artikel:http://asheej.blogspot.com/2012/04/how-to-use-ms-sql-in-clause-with.html
-
Specificeer elk item in variabelen (dit kan behoorlijk lelijk worden als je er veel hebt):
@var1 varchar(20),@var2 varchar(20),@var3 varchar(20)
-
Schrijf een split-functie om de string in een tabelvariabele te veranderen, er zijn er veel. Dit is mijn persoonlijke favoriet:http://dataeducation.com/faster -more-scalable-sqlclr-string-splitting/
-
Gebruik een tabelwaardeparameter (2008):http://www.techrepublic.com/blog/datacenter/passing-table-valued-parameters-in-sql-server-2008/168
-
Hier is een kleine truc met CHARINDEX (merk op dat deze aanpak niet-sargeerbaar is):
Je string is als volgt:'abc,def'
CHARINDEX
gebruiken , vul je zowel de zoekstring als de waarde die je wilt vinden binnen de zoekstring in met je delimeter. Dus als ik mijn kleine voorbeeld gebruik, zou de string ',abc,def' worden, let op de extra komma's aan het begin en einde. Doe vervolgens hetzelfde met de veldgegevens. Als je komma's in je gegevens hebt, moet je het scheidingsteken verwisselen voor iets anders, zoals char (2), of puntkomma's, of wat dan ook.
Om vervolgens de zoekopdracht uit te voeren:
WHERE CHARINDEX ( ',' + expressionToFind + ',' , ',' + expressionToSearch ',') > 0
De opvulling met scheidingstekens zorgt ervoor dat de zoekopdracht "abcabc" niet kan vinden, maar zal "abc" vinden, een exacte overeenkomst.
Als je 2005 gebruikt, zou ik een heel snelle split-functie nemen, zodat je het gebruik van dynamische SQL kunt vermijden.