Вот способ сделать это с помощью рекурсивного ОТВ:
declare @SearchList varchar(20)
set @SearchList= '1,2,3'
;with cte as
(select case charindex(',',@SearchList)
when 0 then cast(@SearchList as int)
else cast(left(@SearchList,charindex(',',@SearchList)-1) as int)
end searchVal,
case charindex(',',@SearchList)
when 0 then ''
else right(@SearchList,
len(@SearchList)-charindex(',',@SearchList))
end remainStr
union all
select case charindex(',',remainStr)
when 0 then cast(remainStr as int)
else cast(left(remainStr,charindex(',',remainStr)-1) as int)
end searchVal,
case charindex(',',remainStr)
when 0 then ''
else right(remainStr,
len(remainStr)-charindex(',',remainStr))
end remainStr
from cte
where remainStr > ''
)
select p.*
from cte
join person p on cte.searchVal = p.person_id
SQLFiddle here.
Тогда нет сомнений, просто не вставляйте строку ввода в пару одинарных кавычек. – Lion
Вы можете использовать что-то вроде [this] (http://stackoverflow.com/a/3097916/1114171), а затем сделать 'IN (SELECT * FROM @xml)' –
Привет Лев, мой код похож. DECLARE @T AS STRING SET @ T = '1,2,3' ВЫБЕРИТЕ * ОТ ЧЕЛОВЕКА, ЧТО PERSON_ID IN (@T). Не могли бы вы помочь изменить это? – user2395176