【问题标题】:Sql Server FOR XML EXPLICIT with inner queries带有内部查询的 SQL Server FOR XML EXPLICIT
【发布时间】:2014-07-21 07:36:20
【问题描述】:

我有以下产生 XML 输出的查询:

select Top 10 1 as tag,
    null as parent, 
    property_name as [Property!1!PropertyName!cdata], 
        (select 2 as tag, 
                1 as parent, 
                 null as [Subdivision!2!SubdivisionName!cdata] 
            from subdivision s 
           where s.subdivision_id=p.fk_subdivision_id
        FOR XML EXPLICIT) 
from property p
FOR XML EXPLICIT,root('Properties')

我预期的结果是:

<Properties>
   <Property>
       <PropertyName><![CDATA[Test Property]]></PropertyName>
       <Subdivision>
          <SubdivisionName><![CDATA[Test Subdivision]]</SubdivisionName>
       </Subdivision>
   </Property>     
</Properties>

我需要将数据包含在cdata 标记中。所以我使用了FOR XML EXPLICIT

当我运行查询时,它给出了这个错误:

FOR XML EXPLICIT 查询包含无效的列名“”。使用 TAGNAME!TAGID!ATTRIBUTENAME[!..] 格式,其中 TAGID 为正整数。

我浏览了很多论坛,但它们都没有帮助我。请任何人帮助我构建查询或提供任何有用的链接。

提前致谢

【问题讨论】:

    标签: sql-server-2008 subquery cdata inner-query for-xml-explicit


    【解决方案1】:

    要使用 FOR XML EXPLICIT,您需要使用 UNIONed 查询而不是嵌套查询来指定节点的层次结构。所有 UNION 的结果是一个表示 XML 的树结构的表,从无父根开始。参考:http://msdn.microsoft.com/en-us/library/ms189068%28v=sql.100%29.aspx

    SELECT
        1 AS Tag,
        NULL AS Parent, 
        p.property_name AS [Property!1!PropertyName!cdata],
        NULL AS [Subdivision!2!SubdivisionName!cdata]
    FROM
        property p
    UNION ALL
    SELECT
        2 AS Tag,
        1 AS Parent,
        NULL AS [Property!1!PropertyName!cdata],
        s.subdivision_name AS [Subdivision!2!SubdivisionName!cdata]
    FROM
        property p
    INNER JOIN
        subdivision s
    ON
        s.subdivision_id = p.fk_subdivision_id
    FOR XML EXPLICIT, ROOT('Properties')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-05
      • 2016-11-08
      • 2010-09-05
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      相关资源
      最近更新 更多