当我们将 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')
我有两个 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')