Элементы XML, присутствующие, несмотря на нулевые значения - PullRequest
1 голос
/ 15 июня 2011

У меня довольно большой SELECT ... FOR XML PATH. Как вы знаете, по умолчанию элементы xml, соответствующие полям со значением NULL, не отображаются в результирующем дереве XML. Для меня это реальная проблема, и я хочу, чтобы ВСЕ элементы отображались независимо от того, равно ли это значение нулю.

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

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

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

1 Ответ

0 голосов
/ 15 июня 2011

без изменения FOR XML PATH на ДЛЯ ЭЛЕМЕНТОВ 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>
...