Перед выполнением запроса с EXEC лучше сначала проверить, как будет выглядеть сгенерированная строка SQL.
Например, выбрав переменную
DECLARE @TSQL VARCHAR(8000), @VAR CHAR(2)
DECLARE @Prefixos VARCHAR(MAX);
WITH cte AS
(
SELECT DISTINCT prefixo
FROM (values ('1'),('2'),('3')) q(prefixo)
)
SELECT @Prefixos = COALESCE(@Prefixos + ', ', '') + prefixo
FROM cte
ORDER BY prefixo
SELECT @TSQL = 'SELECT * FROM OPENQUERY(DICOI_LINKEDSERVER,''SELECT * FROM ssr.vw_sigas_diage where cd_prf_responsavel in (''''' + @Prefixos + ''''''') order by cd_prf_responsavel, codigo'
select @TSQL as TSQL
-- EXEC (@TSQL)
Затем вы можете визуальнопроверьте, есть ли что-то странное в этом.
Или просто попробуйте запустить этот sql самостоятельно и посмотрите, выйдет ли он из строя или нет.
Из этого T-SQL он возвращает такой результат:
SELECT * FROM OPENQUERY(DICOI_LINKEDSERVER,'SELECT * FROM ssr.vw_sigas_diage where cd_prf_responsavel in (''1, 2, 3''') order by cd_prf_responsavel, codigo
Обратите внимание на то, что в этой строке содержится много одинарных кавычек.При использовании IN с числами одинарные кавычки не нужны.И чего-то не хватает в конце.
... in ('+ @Prefixos +') order by cd_prf_responsavel, codigo'');';