1

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

有没有一种方法可以实现这一点,而无需逐个包围每个字段ISNULL(...,'')(我的 SELECT 中有 50 多个字段!)并且无需更改FOR XML PATHintoFOR XML ELEMENTS以使用XSINIL开关(不幸的是,仅适用于ELEMENTS)?

顺便说一下,我怀疑这两个不完全统计的解决方案会导致不同的输出:<fieldname></fieldname><fieldname/>分别。如果可能的话,我更喜欢第一个,但无论如何我都渴望阅读您的宝贵建议。

提前致谢 !:-)

4

1 回答 1

0

无需将 FOR XML PATH 更改为 FOR XML ELEMENTS 即可使用 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>
于 2011-06-15T09:42:57.253 回答