提问人:user3859628 提问时间:7/21/2014 最后编辑:marc_suser3859628 更新时间:7/22/2014 访问量:1567
具有内部查询的 Sql Server FOR XML EXPLICIT
Sql Server FOR XML EXPLICIT with inner queries
问:
我有以下查询,它产生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!塔吉德!ATTRIBUTENAME[..] 格式,其中 TAGID 为正整数。
我浏览过许多论坛,但它们对我没有帮助。请任何人帮助我构建查询或向我提供任何有帮助的链接。
提前致谢
答:
1赞
Muqo
7/22/2014
#1
若要使用 FOR XML EXPLICIT,需要使用 UNION 查询(而不是嵌套查询)指定节点的层次结构。所有 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')
评论