Есть несколько вариантов для вас, но в основном вам нужно, чтобы ваши ценности были в таблице. Я бы предложил для этого переменную таблицы.
Вот версия, которая распаковывает список int.
declare @IDs varchar(max)
set @IDs = :listParam
set @IDs = @IDs+','
declare @T table(ID int primary key)
while len(@IDs) > 1
begin
insert into @T(ID) values (left(@IDs, charindex(',', @IDs)-1))
set @IDs = stuff(@IDs, 1, charindex(',', @IDs), '')
end
select *
from myTable
where intKey in (select ID from @T)
Возможно иметь запросы с несколькими операторами. Параметр :listParam
должен быть строкой:
MyQuery.ParamByName('listParam').AsString := '1,2,3';
Вы можете использовать тот же метод для строк. Вам просто нужно изменить тип данных ID
на, например, varchar(10)
.
Вместо распаковки с циклом while вы можете использовать функцию split
declare @T table(ID varchar(10))
insert into @T
select s
from dbo.Split(',', :listParam)
select *
from myTable
where charKey in (select ID from @T)
Строковый параметр может выглядеть следующим образом:
MyQuery.ParamByName('listParam').AsString := 'Adam,Bertil,Caesar';