尽管存在空值,但Xml元素仍然存在

时间:2011-06-15 09:25:56

标签: sql sql-server-2005 for-xml-path

我有一个相当大的SELECT ... FOR XML PATH。如您所知,默认情况下,与具有空值的字段对应的xml元素不会出现在结果xml树中。对我来说这似乎是一个真正的问题,我希望始终显示所有元素,无论值是否为空。

有没有办法实现这一目标,而不是逐个ISNULL(...,'')围绕每个字段(我的SELECT中超过50个字段!)并且不将FOR XML PATH更改为FOR XML ELEMENTS以使用XSINIL开关(不幸的是只有ELEMENTS才可用)?

顺便说一下,我怀疑这两个不完全令人满意的解决方案会产生不同的输出:<fieldname></fieldname><fieldname/>。如果可能的话,我宁愿选择第一个,但无论如何我都渴望阅读你宝贵的建议。

提前致谢! : - )

1 个答案:

答案 0 :(得分:0)

  

不将FOR XML PATH更改为   FOR XML ELEMENTS使用XSINIL   开关

您可以将elements xsinilfor 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>