Existuje několik způsobů, jak toho dosáhnout:
-
Dynamické SQL, jak je uvedeno v tomto článku:http://asheej.blogspot.com/2012/04/how-to-use-ms-sql-in-clause-with.html
-
Určete každou položku v proměnných (to může být docela ošklivé, pokud jich máte hodně):
@var1 varchar(20),@var2 varchar(20),@var3 varchar(20)
-
Napište funkci rozdělení, která změní řetězec na proměnnou tabulky, existuje mnoho z nich. Tohle je můj osobní favorit:http://dataeducation.com/faster -more-scalable-sqlclr-string-splitting/
-
Použijte parametr hodnoty tabulky (2008):http://www.techrepublic.com/blog/datacenter/passing-table-valued-parameters-in-sql-server-2008/168
-
Zde je malý trik pomocí CHARINDEXU (všimněte si, že tento přístup je Non-Sargable):
Váš řetězec je takto:'abc,def'
Pomocí CHARINDEX
, vyplníte hledaný řetězec i hodnotu, kterou chcete najít v hledaném řetězci, pomocí svého oddělovače. Takže s použitím mého malého příkladu by se řetězec stal ',abc,def', Všimněte si dalších čárek na začátku a konci. Poté proveďte totéž s daty pole. Pokud máte ve svých datech čárky, budete muset vyměnit oddělovač za něco jiného, například char(2) nebo středníky nebo cokoli jiného.
Poté proveďte vyhledávání:
WHERE CHARINDEX ( ',' + expressionToFind + ',' , ',' + expressionToSearch ',') > 0
Oddělovací výplň zabraňuje hledání „abcabc“, ale najde „abc“, přesnou shodu.
Pokud používáte 2005, vzal bych opravdu rychlou funkci rozdělení, abyste se mohli vyhnout použití dynamického SQL.