2011-06-15 38 views
1

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

是否有办法(在我的选择多于50场!)来实现的,如果没有每场周边的ISNULL(...,'')逐一在不改变FOR XML PATHFOR XML ELEMENTS使用XSINIL开关(这是不幸的是仅适用于ELEMENTS )?

我怀疑这2个不完全统计解决方案会导致不同的输出,分别为:<fieldname></fieldname><fieldname/>。如果可能的话,我更喜欢第一个,但我总是渴望阅读你的宝贵建议。

在此先感谢! :-)

回答

0

不改变FOR XML PATH到 XML元素使用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> 
+0

才发现,原来我自己和它完美地解决了我的问题!我甚至可以在我的'SELECT'中保留属性映射字段(但在这种情况下,如果它们为null,我必须显式使用'ISNULL'使它们出现)。我的问题明确表达了事物之间的错误认识和困惑。非常感谢Mikael。这是你第二次冲上sql问题的援助,我深深地意识到你(并且即将升起你的雕像作为我的SQL大师!-)) – Ssithra 2011-06-15 09:59:18

+1

@Sithithra雕像将不胜感激:) 。我很高兴能够提供帮助。 – 2011-06-15 10:04:35