Использование UNION ALL в пути STUFF / XML - PullRequest
8 голосов
/ 06 февраля 2012

Сообщение 1086, Уровень 15, Состояние 1, Строка 20 Предложение FOR XML недопустимо в представлениях, встроенных функциях, производных таблицах и подзапросах, если они содержат оператор множества. Чтобы обойти это, оберните SELECT, содержащий оператор набора, используя производный синтаксис таблицы, и примените FOR XML поверх него.

Я получаю эту ошибку при запуске:

SELECT
    STUFF((
    SELECT 1
    UNION ALL
    SELECT 2
    FOR XML PATH('')
    ),1,0,'') [COLUMN]

отлично работает, когда я запускаю это (без Union ALL)

SELECT
    STUFF((
    SELECT 1
    FOR XML PATH('')
    ),1,0,'') [COLUMN]

Любые предложения, почему UNION ALL не работает или как заставить его работать внутри STUFF()?

1 Ответ

18 голосов
/ 06 февраля 2012

Для этого есть простой обходной путь: вам нужно обернуть ваш запрос на объединение (или любую производную таблицу в этом отношении) другим выбором. Сделайте это и затем продолжите синтаксис как обычно:

select * from
(
SELECT 1 as I
UNION ALL
SELECT 2 as J
) as K

Что-то вроде того, что вы ищете:

SELECT  STUFF((
    select * from(

    SELECT * from dbo.Table1 as I
    UNION ALL
    SELECT * from dbo.Table2 as j
    ) as k
    FOR XML PATH('')
    ),1,0,'')

Я проверил и работает без нареканий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...