Это потому, что «IN» ожидает таблицу, и вы даете ей строку. Даже с «подобным», как предполагалось, это будет очень неряшливо, и ваши результаты не будут точными.
Вам потребуется что-то вроде следующего, чтобы преобразовать строку в таблицу для его работы:
CREATE FUNCTION [dbo].[split] (
@sourcestring varchar(8000),
@spliton varchar(1)
)
RETURNS @split table(value sql_variant)
AS
BEGIN
while (charindex(@spliton,@sourcestring)>0)
begin
insert into @split
select value = ltrim(rtrim(substring(@sourcestring,1,charindex(@spliton,@sourcestring)-1)))
set @sourcestring = substring(@sourcestring,charindex(@spliton,@sourcestring) + len(@spliton),len(@sourcestring))
end
insert into @split select value = ltrim(rtrim(@sourcestring))
RETURN
END
А потом называют это так:
DECLARE @ContentIDs VARCHAR(MAX);
SELECT @ContentIDs = 'e28faa48-adea-484d-9d64-ba1e1c67eea3,8338A6DE-8CDF-4F52-99CE-62E2B107FF97'
SELECT * FROM [Content] WHERE [ID] IN (select value from dbo.split(@ContentIDs,','))
Так как в этом случае я выиграл У меня более 15 идентификаторов, я думаю, я могу использовать опцию 3, ее довольно просто. Варианты 2 - идеальное решение, хотя я мог бы попробовать его когда-нибудь. – BrunoLM