Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 在SQL中将表数据转换为XML时,没有显示多行_Sql Server 2008_Sql Server 2005_Sql Server 2008 R2_Sql Server 2012 - Fatal编程技术网

Sql server 2008 在SQL中将表数据转换为XML时,没有显示多行

Sql server 2008 在SQL中将表数据转换为XML时,没有显示多行,sql-server-2008,sql-server-2005,sql-server-2008-r2,sql-server-2012,Sql Server 2008,Sql Server 2005,Sql Server 2008 R2,Sql Server 2012,我有两张表,如下所示 OrderHeader: PKOrderHeader CustomerCode DocumentRef SiteCode 1 JOE TEST1 TH 2 POL TEST2 CO 3 GEO TEST3 KH OrderDetails: FKOrderHeader ProductCode RotationLineNo 1

我有两张表,如下所示

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  
在将表数据转换为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字符串时,我只得到如下所示的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>

1.
乔
测试1
真实航向
1.
PRD1
1.

那么,有谁能帮助我将多行数据作为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')

谢谢你,好像很痛苦
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')