我有一个相当大的SELECT ... FOR XML PATH
。如您所知,默认情况下,与具有空值的字段对应的xml元素不会出现在结果xml树中。对我来说这似乎是一个真正的问题,我希望始终显示所有元素,无论值是否为空。
有没有办法实现这一目标,而不是逐个ISNULL(...,'')
围绕每个字段(我的SELECT中超过50个字段!)并且不将FOR XML PATH
更改为FOR XML ELEMENTS
以使用XSINIL
开关(不幸的是只有ELEMENTS
才可用)?
顺便说一下,我怀疑这两个不完全令人满意的解决方案会产生不同的输出:<fieldname></fieldname>
和<fieldname/>
。如果可能的话,我宁愿选择第一个,但无论如何我都渴望阅读你宝贵的建议。
提前致谢! : - )
答案 0 :(得分: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>