Я не думаю, что это достигнет того, чего вы ожидаете.Ошибка, которую вы получаете, заключается в том, что она не может преобразовать строку «3,7,5» в число (обратите внимание, что она НЕ пытается анализировать ваши индивидуальные значения).
Два способа получить то, чтоВы хотите:
1) Создать функцию табличного значения, которая принимает строку CSV и возвращает результаты (я уверен, что их много в Интернете; вот связанный вопрос: Эквивалентная функция разделения на T-SQL ).Это хорошо, потому что вы можете полностью избавиться от вызова sproc SP_EXECUTESQL;Ваш запрос:
SELECT name FROM user where id IN (SELECT value FROM dbo.f_Split(@p_MyCodes))
2) Измените ваш набор на что-то вроде:
set @query = 'SELECT name FROM user WHERE id in (' + @p_MyCodes + ')'
Я не рекомендую # 2, он предлагает дыру для SQL-инъекций.