Existem várias maneiras de fazer isso:
-
SQL dinâmico, conforme indicado neste artigo:http://asheej.blogspot.com/2012/04/how-to-use-ms-sql-in-clause-with.html
-
Especifique cada item em variáveis (isso pode ficar bem feio se você tiver muitos):
@var1 varchar(20),@var2 varchar(20),@var3 varchar(20)
-
Escreva uma função de divisão para transformar a string em uma variável de tabela, existem muitas delas por aí. Este é o meu favorito:http://dataeducation.com/faster -more-scalable-sqlclr-string-splitting/
-
Use um parâmetro de valor de tabela (2008):http://www.techrepublic.com/blog/datacenter/passing-table-valued-parameters-in-sql-server-2008/168
-
Aqui está um pequeno truque usando CHARINDEX (observe que esta abordagem não é sargável):
Sua string é assim:'abc,def'
Usando
CHARINDEX
, você preenche a string de pesquisa e o valor que deseja encontrar na string de pesquisa com seu delimitador. Então, usando meu pequeno exemplo, a string se tornaria ',abc,def,' Observe as vírgulas extras no início e no final. Em seguida, faça a mesma coisa com os dados de campo. Se você tiver vírgulas em seus dados, terá que trocar o delimitador por outra coisa, como char(2), ou ponto e vírgula, ou qualquer outra coisa. Em seguida, para realizar a pesquisa:
WHERE CHARINDEX ( ',' + expressionToFind + ',' , ',' + expressionToSearch ',') > 0
O preenchimento do delimitador impede que a pesquisa encontre "abcabc", mas encontrará "abc", correspondência exata.
Se você estiver usando 2005, eu pegaria uma função de divisão muito rápida para evitar o uso de SQL dinâmico.