当我们将 table 数据转换为 SQL 中的 XML 时,多行未显示

Multiple rows are not showing when we convert the table data into XML in SQL

我有两个 table,如下所示。

OrderHeader:

PKOrderHeader CustomerCode DocumentRef SiteCode
1         JOE          TEST1       TH
2         POL          TEST2       CO
3             GEO          TEST3       KH

OrderDetails:

FKOrderHeader   ProductCode RotationLineNo
1       PRD1        1
1                         PRD2        2
2               PRD3        2
3               PRD4        3  

我需要在将 table 数据转换为 XML 字符串后得到如下 XML 字符串

<ORDERS>
   <SO>
       <HD>
           <PKOrderHeader>1</PKOrderHeader>
           <CustomerCode>JOE</CustomerCode>
       </HD>
       <HO>
           <DocumentRef>TEST1</DocumentRef>
           <SiteCode>TH</SiteCode>
       </HO>
       <LO>
           <FKOrderHeader>1</FKOrderHeader>
           <ProductCode>PRD1</ProductCode>
           <RotationLineNo>1</RotationLineNo>
       </LO>
       <LO>
           <FKOrderHeader>1</FKOrderHeader>
           <ProductCode>PRD2</ProductCode>
           <RotationLineNo>2</RotationLineNo>
       </LO>
  </SO>
  <SO>
     <HD>
           <PKOrderHeader>2</PKOrderHeader>
           <CustomerCode>POL</CustomerCode>
       </HD>
       <HO>
           <DocumentRef>TEST2</DocumentRef>
           <SiteCode>CO</SiteCode>
       </HO>
       <LO>
           <FKOrderHeader>2</FKOrderHeader>
           <ProductCode>PRD2</ProductCode>
           <RotationLineNo>2</RotationLineNo>
       </LO>       
  </SO>
  <SO>
     <HD>
           <PKOrderHeader>3</PKOrderHeader>
           <CustomerCode>GOE</CustomerCode>
       </HD>
       <HO>
           <DocumentRef>TEST3</DocumentRef>
           <SiteCode>KH</SiteCode>
       </HO>
       <LO>
           <FKOrderHeader>3</FKOrderHeader>
           <ProductCode>PRD3</ProductCode>
           <RotationLineNo>3</RotationLineNo>
       </LO>  
   </SO>
</ORDERS>

我用来生成 XML 字符串的查询是给定的

 SELECT
    (SELECT PKOrderHeader, CustomerCode FROM #OrderHeader FOR XML PATH(''), TYPE) AS HD,
    (SELECT DocumentRef, SiteCode FROM #OrderHeader FOR XML PATH(''), TYPE) AS HO,      
    (SELECT FKOrderHeader, ProductCode, RotationLineNo FROM #OrderDetail FOR XML PATH(''), TYPE) AS LO
FOR XML PATH('SO'), ROOT('ORDERS')

但是当我生成 XML 字符串时,我只得到单行数据作为 XML 字符串,如下所示。此外,LO 部分也没有显示多行。

<ORDERS>
   <SO>
       <HD>
           <PKOrderHeader>1</PKOrderHeader>
           <CustomerCode>JOE</CustomerCode>
       </HD>
       <HO>
           <DocumentRef>TEST1</DocumentRef>
           <SiteCode>TH</SiteCode>
       </HO>
       <LO>
           <FKOrderHeader>1</FKOrderHeader>
           <ProductCode>PRD1</ProductCode>
           <RotationLineNo>1</RotationLineNo>
       </LO>
   </SO>
</ORDERS>

所以谁能帮我获取多行数据作为 XML 字符串?

您可以使用以下查询实现所需的内容:

select
    (select PKOrderHeader, CustomerCode for xml path('HD'), type),
    (select DocumentRef, SiteCode for xml path('HO'), type),
    (
        select FKOrderHeader, ProductCode, RotationLineNo
        from #OrderDetails od
        where od.FKOrderHeader = oh.PKOrderHeader
        for xml path('LO'), type
    )
from #OrderHeader oh
for xml path('SO'), root('ORDERS')