【问题标题】:Xml elements present in spite of null values尽管存在空值,但仍存在 Xml 元素
【发布时间】:2011-06-15 09:25:56
【问题描述】:

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

有没有一种方法可以在不将每个字段逐个包围 ISNULL(...,'') (我的 SELECT 中超过 50 个字段!)并且不将 FOR XML PATH 更改为 FOR XML ELEMENTS 以使用 XSINIL 开关(不幸的是,这仅适用于ELEMENTS)?

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

提前致谢! :-)

【问题讨论】:

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


    【解决方案1】:

    无需将 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>
    

    【讨论】:

    • 我自己刚刚发现,它完美地解决了我的问题!我什至可以在我的SELECT 中保留属性映射字段(但在这种情况下,如果它们为空,我必须明确使用ISNULL 让它们出现)。我的问题清楚地表达了事物之间的误解和混淆。非常感谢米凯尔。这是您第二次在 sql 问题上急于帮助我,我深深地认可了您(并且即将树立您作为我的 SQL 大师的雕像!;-))
    • @Ssithra 一座雕像将不胜感激:)。我很高兴能够提供帮助。
    猜你喜欢
    • 2019-04-26
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    相关资源
    最近更新 更多