T-SQL XML не возвращает элемент, если нет дочерних элементов - PullRequest
0 голосов
/ 03 октября 2018

Я не хочу возвращать элемент Xml, если нет дочерних элементов:

SELECT 
(
        SELECT
                'nl' AS [@Language]
                ,'test' AS [@Value]
        WHERE 1=0
        FOR XML PATH('Translation'), ROOT('Translations'), TYPE
)
FOR XML RAW('IngredientStatement'), TYPE

В этом случае возвращается <IngredientStatement />.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Другой подход состоял в добавлении XQuery, фильтрации для <IngredientStatement> с любым содержимым:

SELECT
(
    SELECT 
    (
            SELECT
                    'nl' AS [@Language]
                    ,'test' AS [@Value]
            WHERE 1=0
            FOR XML PATH('Translation'), ROOT('Translations'), TYPE
    )
    FOR XML RAW('IngredientStatement'), TYPE
).query('/IngredientStatement[*]')
0 голосов
/ 03 октября 2018

Один из способов сделать это - разделить внутренний выбор в общем табличном выражении:

;WITH InnerXmlCte AS
(
    SELECT 
    (
            SELECT
                    'nl' AS [@Language]
                    ,'test' AS [@Value]
            WHERE 1=0
            FOR XML PATH('Translation'),  TYPE
    ) As Translations
)

SELECT Translations
FROM InnerXmlCte
WHERE Translations IS NOT NULL
FOR XML RAW('IngredientStatement'), TYPE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...