Для Sql Server вы можете использовать динамический SQL.
Большую часть времени в таких ситуациях у вас есть параметр предложения IN, основанный на некоторых данных из базы данных.
Пример ниже немного «принудительный», но он может соответствовать различным реальным случаям, найденным в устаревших базах данных.
Предположим, у вас есть таблица Персоны , в которой имена людей хранятся в одном поле PersonName как FirstName + '' + LastName.
Вам необходимо выбрать всех людей из списка имен, хранящегося в поле NameToSelect в таблице NamesToSelect , а также некоторые дополнительные критерии (например, фильтруются по полу, дате рождения и т. Д.)
Вы можете сделать это следующим образом
-- @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