Der er flere måder at opnå dette på:
-
Dynamisk SQL, som påpeget i denne artikel:http://asheej.blogspot.com/2012/04/how-to-use-ms-sql-in-clause-with.html
-
Angiv hvert element i variabler (dette kan blive ret grimt, hvis du har mange af dem):
@var1 varchar(20),@var2 varchar(20),@var3 varchar(20)
-
Skriv en splitfunktion for at gøre strengen til en tabelvariabel, der er mange af dem derude. Denne er min personlige favorit:http://dataeducation.com/faster -more-scalable-sqlclr-string-splitting/
-
Brug en tabelværdiparameter (2008):http://www.techrepublic.com/blog/datacenter/passing-table-valued-parameters-in-sql-server-2008/168
-
Her er et lille trick ved hjælp af CHARINDEX (bemærk, at denne tilgang er ikke-sargerbar):
Din streng er sådan:'abc,def'
Brug af CHARINDEX
, udfylder du både søgestrengen og værdien, du ønsker at finde i søgestrengen, med dit delimeter. Så ved at bruge mit lille eksempel, ville strengen blive ',abc,def,' Bemærk de ekstra kommaer i begyndelsen og slutningen. Gør derefter det samme med feltdataene. Hvis du har kommaer i dine data, bliver du nødt til at udskifte delimetret til noget andet, f.eks. char(2) eller semikolon eller hvad som helst.
For derefter at udføre søgningen:
WHERE CHARINDEX ( ',' + expressionToFind + ',' , ',' + expressionToSearch ',') > 0
Delimeter-polstringen forhindrer søgningen i at finde "abcabc", men vil finde "abc", eksakt match.
Hvis du bruger 2005, ville jeg have fat i en virkelig hurtig split-funktion, så du kan undgå at bruge dynamisk SQL.