Para Sql Server puede recurrir a SQL dinámico.
La mayoría de las veces, en tales situaciones, el parámetro de la cláusula IN se basa en algunos datos de la base de datos.
El siguiente ejemplo es un poco «forzado», pero puede coincidir con varios casos reales encontrados en bases de datos heredadas.
Suponga que tiene mesa Personas donde los nombres de las personas se almacenan en un solo campo PersonName como Nombre + » + Apellido. Debe seleccionar a todas las personas de una lista de nombres, almacenados en el campo NameToSelect en mesa Nombres para seleccionar, además de algunos criterios adicionales (como filtrado por género, fecha de nacimiento, etc.)
Puedes hacerlo de la siguiente manera
-- @gender is nchar(1), @birthDate is date
declare
@sql nvarchar(MAX),
@subWhere nvarchar(MAX)
@params nvarchar(MAX)
-- prepare the where sub-clause to cover LIKE IN (...)
-- it will actually generate where clause PersonName Like 'param1%' or PersonName Like 'param2%' or ...
set @subWhere = STUFF(
(
SELECT ' OR PersonName like ''' + [NameToSelect] + '%'''
FROM [NamesToSelect] t FOR XML PATH('')
), 1, 4, '')
-- create the dynamic SQL
set @sql="select
PersonName
,Gender
,BirstDate -- and other field here
from [Persons]
where
Gender = @gender
AND BirthDate = @birthDate
AND (" + @subWhere + ')'
set @params=" @gender nchar(1),
@birthDate Date"
EXECUTE sp_executesql @sql, @params,
@gender,
@birthDate