SQL Server для XML-пути с двойными элементами

Я пытаюсь создать вывод XML в SQL Server 2012, используя FOR XML PATH.
Что можно сделать, чтобы получить желаемый результат?

Я хотел бы вывести:

<types>
    <type>
        <type>FirstType</type>
        <attribute>FirstAttribute</attribute>
    </type>
</types>
<types>
    <type>
        <type>SecondType</type>
        <attribute>SecondAttribute</attribute>
    </type>
</types>
<types>
    <type>
        <type>ThirdType</type>
        <attribute>ThirdAttribute</attribute>
    </type>
</types>

Мой код:

DECLARE @table TABLE (
type VARCHAR(50)
, attribute VARCHAR(50)
)

SELECT T1.type
, T1.attribute
FROM @table AS T1
FOR XML path('type'), root('types')

Дает мне неправильный вывод:

<types>
    <type>
        <type>FirstType</type>
        <attribute>FirstAttribute</attribute>
    </type>
    <type>
        <type>SecondType</type>
        <attribute>SecondAttribute</attribute>
    </type>
    <type>
        <type>ThirdType</type>
        <attribute>ThirdAttribute</attribute>
    </type>
</types>

2 ответа

Решение

Это возвращает то, что вы хотите:

DECLARE @table TABLE (
[type] VARCHAR(50)
, attribute VARCHAR(50)
)
INSERT INTO @table VALUES('FirstType','FirstAttribute')
                        ,('SecondType','SecondAttribute')

SELECT T1.type AS [type/type]
, T1.attribute AS [type/attribute]
FROM @table AS T1
FOR XML path('types');

Но будьте осторожны: он недействителен из-за отсутствия корневого узла. XML-движок SQL-Server может справиться с этим, но другие движки могут выйти из строя...

Я думаю, что SQL Server не так строг, поскольку - очень часто - XML ​​состоит из нескольких фрагментов. И таким результатом может стать один из этих фрагментов без проблем...

Я хотел бы вывести:

<types>
<type>
    <type>FirstType</type>
    <attribute>FirstAttribute</attribute>
</type> </types> <types>
<type>
    <type>SecondType</type>
    <attribute>SecondAttribute</attribute>
</type> </types> <types>
<type>
    <type>ThirdType</type>
    <attribute>ThirdAttribute</attribute>
</type> 
</types>

Ваш желаемый вывод - это даже не правильно сформированный XML:

XML Parsing Error: junk after document element
Location: https://www.w3schools.com/xml/xml_validator.asp
Line Number 7, Column 1:
<types>
^

Вы не можете иметь несколько корневых элементов.

Другие вопросы по тегам