Я не знаю, почему это не удается, но вот функция разбиения, которая устраняет необходимость динамического запроса:
CREATE FUNCTION StringToTable (@p_list varchar (MAX), @p_separator varchar (5) =',', @p_distinct bit = null) ВОЗВРАЩАЕТСЯ таблица @ParsedList (элемент varchar (500)), КАК НАЧАТЬ
DECLARE @v_element varchar(500), @Pos int, @v_insert_ind bit
SET @p_list = LTRIM(RTRIM(@p_list))+ @p_separator
SET @Pos = CHARINDEX(@p_separator, @p_list, 1)
IF REPLACE(@p_list, @p_separator, '') <> ''
BEGIN
WHILE @Pos > 0
BEGIN
SET @v_insert_ind = 1
SET @v_element = LTRIM(RTRIM(LEFT(@p_list, @Pos - 1)))
IF @v_element <> ''
BEGIN
IF (@p_distinct = 1)
AND (SELECT count(element) FROM @ParsedList WHERE element = @v_element) > 0
SET @v_insert_ind = 0
IF @v_insert_ind = 1
BEGIN
INSERT INTO @ParsedList (element)
VALUES (@v_element)
END
END
--
SET @p_list = RIGHT(@p_list, LEN(@p_list) - @Pos)
SET @Pos = CHARINDEX(@p_separator, @p_list, 1)
END
END
RETURN
END