多个父标记的sql query for xml explicit中嵌套查询的问题

多个父标记的sql query for xml explicit中嵌套查询的问题,sql,xml,cdata,for-xml,for-xml-explicit,Sql,Xml,Cdata,For Xml,For Xml Explicit,使用XML显式查询,因为客户需要我使用CDATA标记,但在为研究领域编写嵌套XML时遇到问题 SELECT 1 AS Tag, 0 AS Parent, NULL AS [row!1], NULL AS [Department!2!Department!Cdata], NULL AS [Job!3], NULL AS [Job!4!Jobtitle!CDATA], NULL AS [Job!4!Ranking], NULL AS

使用XML显式查询,因为客户需要我使用CDATA标记,但在为研究领域编写嵌套XML时遇到问题

 SELECT 
    1 AS Tag,
    0 AS Parent,
    NULL AS [row!1],
    NULL AS [Department!2!Department!Cdata],
    NULL AS [Job!3],
    NULL AS [Job!4!Jobtitle!CDATA],
    NULL AS [Job!4!Ranking],
    NULL AS [UserDetails!5!PersonalID!element],
    NULL AS [UserDetails!5!OverallRanking!element],
    NULL AS [UserDetails!5!Forename!element],
    NULL AS [UserDetails!5!Surname!element],
    NULL AS [ResearchArea!6!ResearchAreaName],
    NULL AS [ResearchArea!7!ResearchAreaName!CDATA]



UNION 

SELECT 
    2 AS Tag,
    1 AS Parent,
    NULL,
    Department,
    NULL,
    NULL,
    NULL,
    NULL,
NULL,
NULL,
NULL,
NULL,
null

FROM [dbo].[FACTUserProfile] FACT 
inner join [dbo].[UPDepartmentJob] UPJob on UPJob.UserProfileID=FACT.UserProfileID
INNER JOIN [dbo].[DepartmentJob] Job ON UPJob.DepJobID=Job.DepJobID
where FACT.ProfileStatusID=1
  UNION 
SELECT 
    3 AS Tag,
    2 AS Parent,
    NULL,
    Department,
    NULL,
    NULL,
    NULL,
    NULL,
NULL,
NULL,
NULL,
NULL,
null
FROM [dbo].[FACTUserProfile] FACT 
inner join [dbo].[UPDepartmentJob] UPJob on UPJob.UserProfileID=FACT.UserProfileID
INNER JOIN [dbo].[DepartmentJob] Job ON UPJob.DepJobID=Job.DepJobID
where FACT.ProfileStatusID=1

 UNION 

SELECT 
    4 AS Tag,
    3 AS Parent,
    NULL,
    Department,
    NULL,
    JobTitle,
    Ranking,
    null,
    NULL,
    NULL,
NULL,
NULL,
null
FROM [dbo].[FACTUserProfile] FACT 
inner join [dbo].[UPDepartmentJob] UPJob on UPJob.UserProfileID=FACT.UserProfileID
INNER JOIN [dbo].[DepartmentJob] Job ON UPJob.DepJobID=Job.DepJobID
INNER JOIN [dbo].UserDetails userdetails ON fact.UserDetailsID=userdetails.UserDetailsID
where FACT.ProfileStatusID=1

 UNION 

SELECT 
    4 AS Tag,
    3 AS Parent,
    NULL,
    Department,
    NULL,
    JobTitle,
    Ranking,
    null,
    NULL,
    NULL,
NULL,
NULL,
null
FROM [dbo].[FACTUserProfile] FACT 
inner join [dbo].[UPDepartmentJob] UPJob on UPJob.UserProfileID=FACT.UserProfileID
INNER JOIN [dbo].[DepartmentJob] Job ON UPJob.DepJobID=Job.DepJobID
INNER JOIN [dbo].UserDetails userdetails ON fact.UserDetailsID=userdetails.UserDetailsID
where FACT.ProfileStatusID=1

 UNION 

SELECT 
    5 AS Tag,
    4 AS Parent,
    NULL,
    job.Department,
    NULL,
    JobTitle,
    Ranking,
    userdetails.PersonalID,
    ROW_NUMBER() OVER(PARTITION BY job.Department ORDER BY Ranking, userdetails.Surname ASC, userdetails.Forename ASC) AS OverallRanking
    ,userdetails.[Forename]
    ,userdetails.[Surname]
    ,null
    ,null

FROM [dbo].[FACTUserProfile] FACT 
 inner join [dbo].[UPDepartmentJob] UPJob on UPJob.UserProfileID=FACT.UserProfileID
  INNER JOIN [dbo].[DepartmentJob] Job ON UPJob.DepJobID=Job.DepJobID
  inner join [dbo].[DepartmentContactDetails] DeptContact on DeptContact.DepartmentID=job.DepartmentID
  INNER JOIN [dbo].UserDetails userdetails ON fact.UserDetailsID=userdetails.UserDetailsID
  left join dbo.UPResearchArea UPRA on UPRA.UserProfileID=FACT.UserProfileID
  left JOIN [dbo].[ResearchArea] ResearchArea ON ResearchArea.RAreaID=UPRA.RAreaID
where FACT.ProfileStatusID=1

UNION 

SELECT 
    6 AS Tag,
    5 AS Parent,
    NULL,
    job.Department,
    NULL,
    JobTitle,
    Ranking,
    userdetails.PersonalID,
    ROW_NUMBER() OVER(PARTITION BY job.Department ORDER BY Ranking, userdetails.Surname ASC, userdetails.Forename ASC) AS OverallRanking
    ,userdetails.[Forename]
    ,userdetails.[Surname]
    ,null
    ,null

FROM [dbo].[FACTUserProfile] FACT 
 inner join [dbo].[UPDepartmentJob] UPJob on UPJob.UserProfileID=FACT.UserProfileID
  INNER JOIN [dbo].[DepartmentJob] Job ON UPJob.DepJobID=Job.DepJobID
  inner join [dbo].[DepartmentContactDetails] DeptContact on DeptContact.DepartmentID=job.DepartmentID
  INNER JOIN [dbo].UserDetails userdetails ON fact.UserDetailsID=userdetails.UserDetailsID
  left join dbo.UPResearchArea UPRA on UPRA.UserProfileID=FACT.UserProfileID
  left JOIN [dbo].[ResearchArea] ResearchArea ON ResearchArea.RAreaID=UPRA.RAreaID

where FACT.ProfileStatusID=1

UNION 

SELECT 
    7 AS Tag,
    5 AS Parent,
    NULL,
    job.Department,
    NULL,
    JobTitle,
    Ranking,
    userdetails.PersonalID,
    ROW_NUMBER() OVER(PARTITION BY job.Department ORDER BY Ranking, userdetails.Surname ASC, userdetails.Forename ASC) AS OverallRanking
    ,userdetails.[Forename]
    ,userdetails.[Surname]
    ,null
    ,ResearchArea.ResearchAreaName

FROM [dbo].[FACTUserProfile] FACT 
 inner join [dbo].[UPDepartmentJob] UPJob on UPJob.UserProfileID=FACT.UserProfileID
  INNER JOIN [dbo].[DepartmentJob] Job ON UPJob.DepJobID=Job.DepJobID
  inner join [dbo].[DepartmentContactDetails] DeptContact on DeptContact.DepartmentID=job.DepartmentID
  INNER JOIN [dbo].UserDetails userdetails ON fact.UserDetailsID=userdetails.UserDetailsID
  left join dbo.UPResearchArea UPRA on UPRA.UserProfileID=FACT.UserProfileID
  left JOIN [dbo].[ResearchArea] ResearchArea ON ResearchArea.RAreaID=UPRA.RAreaID

where FACT.ProfileStatusID=1

order by [Department!2!Department!Cdata], [Job!4!Ranking], [Job!4!Jobtitle!CDATA], [UserDetails!5!OverallRanking!element]
FOR XML EXPLICIT
当我执行此代码时,它会产生以下结果:

<row>
  <Department>
    <Department><![CDATA[Brass]]></Department>
    <Job>
      <Job Ranking="3">
        <Jobtitle><![CDATA[Head of Brass]]></Jobtitle>
        <UserDetails>
          <PersonalID>01881</PersonalID>
          <OverallRanking>1</OverallRanking>
          <Forename>Nigel</Forename>
          <Surname>Black</Surname>
          <ResearchArea />
          <ResearchArea>
            <ResearchAreaName><![CDATA[Psychology]]></ResearchAreaName>
          </ResearchArea>
        </UserDetails>
        <UserDetails>
          <PersonalID>01881</PersonalID>
          <OverallRanking>2</OverallRanking>
          <Forename>Nigel</Forename>
          <Surname>Black</Surname>
          <ResearchArea />
          <ResearchArea>
            <ResearchAreaName><![CDATA[Health & Wellbeing]]></ResearchAreaName>
          </ResearchArea>
        </UserDetails>
      </Job>
   <row>
      <Department>
        <Department><![CDATA[Brass]]></Department>
        <Job>
          <Job Ranking="3">
            <Jobtitle><![CDATA[Head of Brass]]></Jobtitle>
            <UserDetails>
              <PersonalID>01881</PersonalID>
              <OverallRanking>1</OverallRanking>
              <Forename>Nigel</Forename>
              <Surname>Black</Surname>
              <ResearchArea />
              <ResearchArea>
                <ResearchAreaName><![CDATA[Psychology]]></ResearchAreaName>
                <ResearchAreaName><![CDATA[Health & Wellbeing]]>   
              </ResearchAreaName>
              </ResearchArea>
            </UserDetails>
          </Job>

01881
1.
奈杰尔
黑色
01881
2.
奈杰尔
黑色
但我需要提供以下信息:

<row>
  <Department>
    <Department><![CDATA[Brass]]></Department>
    <Job>
      <Job Ranking="3">
        <Jobtitle><![CDATA[Head of Brass]]></Jobtitle>
        <UserDetails>
          <PersonalID>01881</PersonalID>
          <OverallRanking>1</OverallRanking>
          <Forename>Nigel</Forename>
          <Surname>Black</Surname>
          <ResearchArea />
          <ResearchArea>
            <ResearchAreaName><![CDATA[Psychology]]></ResearchAreaName>
          </ResearchArea>
        </UserDetails>
        <UserDetails>
          <PersonalID>01881</PersonalID>
          <OverallRanking>2</OverallRanking>
          <Forename>Nigel</Forename>
          <Surname>Black</Surname>
          <ResearchArea />
          <ResearchArea>
            <ResearchAreaName><![CDATA[Health & Wellbeing]]></ResearchAreaName>
          </ResearchArea>
        </UserDetails>
      </Job>
   <row>
      <Department>
        <Department><![CDATA[Brass]]></Department>
        <Job>
          <Job Ranking="3">
            <Jobtitle><![CDATA[Head of Brass]]></Jobtitle>
            <UserDetails>
              <PersonalID>01881</PersonalID>
              <OverallRanking>1</OverallRanking>
              <Forename>Nigel</Forename>
              <Surname>Black</Surname>
              <ResearchArea />
              <ResearchArea>
                <ResearchAreaName><![CDATA[Psychology]]></ResearchAreaName>
                <ResearchAreaName><![CDATA[Health & Wellbeing]]>   
              </ResearchAreaName>
              </ResearchArea>
            </UserDetails>
          </Job>

01881
1.
奈杰尔
黑色
有人能帮忙吗? 请不要要求我使用其他for xml子句,因为我需要CDATA标记来标记中包含html代码的字段

非常感谢,, 劳伦