Има няколко начина да постигнете това:
-
Динамичен 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 -more-scalable-sqlclr-string-splitting/
-
Използвайте параметър за стойност на таблица (2008):http://www.techrepublic.com/blog/datacenter/passing-table-valued-parameters-in-sql-server-2008/168
-
Ето един малък трик с помощта на CHARINDEX (обърнете внимание, че този подход не е Sargable):
Вашият низ е така:'abc,def'
Използване на CHARINDEX
, допълвате както низа за търсене, така и стойността, която искате да намерите в низа за търсене с вашия разделител. И така, използвайки моя малък пример, низът ще стане ',abc,def'. Забележете допълнителните запетаи в началото и края. След това направете същото с данните в полето. Ако имате запетаи във вашите данни, ще трябва да замените разделителя с нещо друго, като char(2), или точка и запетая, или каквото и да е друго.
След това, за да извършите търсенето:
WHERE CHARINDEX ( ',' + expressionToFind + ',' , ',' + expressionToSearch ',') > 0
Подпълването на разделителя не позволява търсенето да намери "abcabc", но ще намери "abc", точно съвпадение.
Ако използвате 2005, бих хванал наистина бърза функция за разделяне, така че да избегнете използването на динамичен SQL.