XML -элементы присутствуют, несмотря на нулевые значения

StackOverflow https://stackoverflow.com/questions/6355613

Вопрос

У меня довольно большой SELECT ... FOR XML PATH. Анкет Как вы знаете, по умолчанию XML -элементы, соответствующие полям с нулевым значением, не появляются в результате XML Tree. Это кажется настоящей проблемой для меня, и я хочу, чтобы все элементы появились, будь то значение или нет.

Есть ли способ достичь этого без окружения каждого поля ISNULL(...,'') один за другим (более 50 полей в моем выборе!) И без изменения FOR XML PATH в FOR XML ELEMENTS использовать XSINIL переключить (что, к сожалению, доступно только с ELEMENTS) ?

Я подозреваю, что эти 2 не устойчивые решения, кстати, приведут к различным выходам: <fieldname></fieldname> а также <fieldname/> соответственно. Если это возможно, я бы предпочел первый, но я все равно хочу прочитать ваши драгоценные предложения.

Заранее спасибо ! :-)

Это было полезно?

Решение

без изменения пути для XML для элементов XML для использования переключателя xsinil

Вы можете использовать elements xsinil с for xml path.

declare @T table (ID int identity, Name varchar(50))

insert into @T values ('Name1')
insert into @T values (null)
insert into @T values ('Name2')

select
  ID,
  Name
from @T
for xml path('item'), root('root'), elements xsinil

Результат:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <item>
    <ID>1</ID>
    <Name>Name1</Name>
  </item>
  <item>
    <ID>2</ID>
    <Name xsi:nil="true" />
  </item>
  <item>
    <ID>3</ID>
    <Name>Name2</Name>
  </item>
</root>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top