SQL Server FOR XML EXPLICIT с внутренними запросами
У меня есть следующий запрос, который производит вывод 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 является положительным целым числом.
Я прошел много форумов, но они мне не помогли. Пожалуйста, кто-нибудь поможет мне в формулировании запроса или предоставит мне любые ссылки, которые помогут.
заранее спасибо
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')