Добавить два атрибута в for xml path, но чтобы был закрывающий тег

Есть запрос для MS Sql Server:

select id as "@Id", name as "@Name" 
from [mydatabase]
for xml path('furgon')

Результат получаю такой:

<furgon Id="51000813" Name="блаблабла" />
<furgon Id="11070" Name="блаблабла1" />
<furgon Id="0" Name="блаблабла2" />

А мне нужен результат такой:

<furgon Id="51000813" Name="блаблабла" >
</furgon>
<furgon Id="11070" Name="блаблабла1" >
</furgon>
<furgon Id="0" Name="блаблабла2" >
</furgon>

Подскажите, пожалуйста, как изменить запрос?


Ответы (1 шт):

Автор решения: Alexander Petrov

В первом результате закрывающий тег тоже есть, вот он: />.
Так что эти два результата равны, за исключением пробельных символов, которые чаще всего игнорируются.

Если добавить в запрос '':

select id as "@Id", name as "@Name", ''

то получится результат:

<furgon Id="51000813" Name="блаблабла"></furgon>

Тут есть явный закрывающий тег, но на той же строке.

Если добавить в запрос char(10):

select id as "@Id", name as "@Name", char(10)

то, соответственно, вставится перевод строки:

<furgon Id="51000813" Name="блаблабла">
</furgon>

Тут вопрос щекотливый, а как и где дальше этот результат будет использоваться? Если передавать эти данные в xml-парсер, соответствующий спецификации xml, то ему плевать на пробельные символы - он переварит все (в зависимости от настроек).
Но вы, похоже, хотите просто вывести результат куда-то в UI. Тут всё зависит от того, что это за UI? А также Windows или Linux? Они по разному воспринимают символы перевода строки и возврата каретки. Возможно, придётся добавить char(13).

→ Ссылка