Как написать SQL Select для XML, включая логику объединения? - PullRequest
0 голосов
/ 29 января 2019

У меня есть следующий оператор для получения обеих дат в @ xmlData

declare @xmlData OUTOUT

SET @xmlData = (SELECT @FileDate AS [FileDate] UNION SELECT @satDate AS [FileDate] FOR XML RAW, ELEMENTS)

Затем я вставлю его в таблицу:

DECLARE @ListOfDates TABLE (FileDate varchar(50))

        INSERT @ListOfDates (FileDate)
        SELECT Tbl.Col.value('FileDate[1]', 'varchar(50)') 
        FROM @xmlData.nodes('//row') Tbl(Col)  

При выполнении логики select,Я получаю сообщение об ошибке:

Предложения FOR XML и FOR JSON недопустимы в представлениях, встроенных функциях, производных таблицах и подзапросах, если они содержат оператор набора.Чтобы обойти это, оберните SELECT, содержащий оператор набора, используя производную таблицу или общее табличное выражение или представление, и примените FOR XML или FOR JSON поверх него.

Как это исправить?

1 Ответ

0 голосов
/ 29 января 2019

Я не понимаю, почему вы вообще используете XML здесь.Но ошибка говорит о том, что вам нужно перенести этот запрос в производную таблицу (подзапрос) или CTE, например:

declare @xmlData xml
declare @filedate date = getdate()
declare @satdate date = '20140101'

SET @xmlData = (

select * from 
( SELECT @FileDate AS [FileDate] UNION ALL SELECT @satDate AS [FileDate] ) d
FOR XML RAW, ELEMENTS, type

)

select @xmlData
...