0

I가 XML 출력을 생성하는 다음 쿼리 :는 SQL 서버

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 query contains the invalid column name ''. Use the TAGNAME!TAGID!ATTRIBUTENAME[!..] format where TAGID is a positive integer.

나는 많은 포럼을 통해 갔다,하지만 그들은 나에게 도움이되지 않았다. 누군가가 질문을 골라 내거나 도움이 될 수있는 링크를 제공 해주시기 바랍니다. 사전

답변

0

에서

덕분에 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')