如何将XML AUTO与SQL结合使用以创建包含两个嵌套表的结构
谢谢你的阅读。 我目前正在尝试将XMLAuto与3个表一起使用,以生成一个XML文档,该文档包含1个顶级表和2个不同的子级表 一个包含两个表的简单示例:如何将XML AUTO与SQL结合使用以创建包含两个嵌套表的结构,sql,sql-server,xml,Sql,Sql Server,Xml,谢谢你的阅读。 我目前正在尝试将XMLAuto与3个表一起使用,以生成一个XML文档,该文档包含1个顶级表和2个不同的子级表 一个包含两个表的简单示例: SELECT dbo.SalesOrder.SupplementaryReference AS SupplementaryReference, dbo.SalesOrder.Address AS Address, dbo.SalesOrder.Address2 AS Address2, dbo.SalesOrder.CardCo
SELECT
dbo.SalesOrder.SupplementaryReference AS SupplementaryReference,
dbo.SalesOrder.Address AS Address,
dbo.SalesOrder.Address2 AS Address2,
dbo.SalesOrder.CardCode AS CardCode,
dbo.SalesOrder.DocDate AS DocDate,
dbo.SalesOrder.DocDueDate AS DocDueDate,
dbo.SalesOrderLines.ItemCode AS ItemCode,
dbo.SalesOrderLines.Quantity AS Quantity
FROM
dbo.SalesOrderLines,
dbo.SalesOrder
WHERE
dbo.SalesOrderLines.SupplementaryReference = dbo.SalesOrder.SupplementaryReference
FOR XML AUTO, ELEMENTS, ROOT('root')
这将生成如下输出xml文档:
<root>
<dbo.SalesOrder>
<Address>...</Address>
<Address2>...</Address2>
.....
.....
<dbo.SalesOrderLines>
<ItemCode>...</ItemCode>
<Quantity>...</Quantity>
</dbo.SalesOrderLines>
</dbo.SalesOrder>
</root>
SELECT so.[Address]
,so.Address2
/*more columns*/
,(
SELECT sol.ItemCode
,sol.Quantity
FROM dbo.SalesOrderLines AS sol
WHERE so.SupplementaryReference =sol.SupplementaryReference
FOR XML PATH('dbo.SalesOrderLines'),TYPE --only one row???
) AS [node()]
,(
SELECT sol.ItemCode
,sol.Quantity
FROM dbo.SalesOrderExpenses AS soe
WHERE so.SupplementaryReference =soe.SupplementaryReference
FOR XML PATH('dbo.SalesOrderLines'),TYPE --only one row???
) AS [node()]
FROM dbo.SalesOrder AS so
但是,我收到的输出将第三个表嵌套在第二个表中:
<root>
<dbo.SalesOrder>
<Address>...</Address>
<Address2>...</Address2>
.....
.....
<dbo.SalesOrderExpenses>
<BaseType>...</BaseType>
<ExpnsCode>...</ExpnsCode>
<LineTotal>...</LineTotal>
<dbo.SalesOrderLines>
<ItemCode>...</ItemCode>
<Quantity>...</Quantity>
</dbo.SalesOrderLines>
</dbo.SalesOrderExpenses>
</dbo.SalesOrder>
</root>
...
...
.....
.....
...
...
...
...
...
有什么想法吗?
谢谢您的时间。如果没有示例数据,您很难给出建议,但您可能正在寻找以下内容:
<root>
<dbo.SalesOrder>
<Address>...</Address>
<Address2>...</Address2>
.....
.....
<dbo.SalesOrderLines>
<ItemCode>...</ItemCode>
<Quantity>...</Quantity>
</dbo.SalesOrderLines>
</dbo.SalesOrder>
</root>
SELECT so.[Address]
,so.Address2
/*more columns*/
,(
SELECT sol.ItemCode
,sol.Quantity
FROM dbo.SalesOrderLines AS sol
WHERE so.SupplementaryReference =sol.SupplementaryReference
FOR XML PATH('dbo.SalesOrderLines'),TYPE --only one row???
) AS [node()]
,(
SELECT sol.ItemCode
,sol.Quantity
FROM dbo.SalesOrderExpenses AS soe
WHERE so.SupplementaryReference =soe.SupplementaryReference
FOR XML PATH('dbo.SalesOrderLines'),TYPE --only one row???
) AS [node()]
FROM dbo.SalesOrder AS so
顺便说一句:避免使用老式的联接,即使用逗号添加表名,并在where
子句中设置联接谓词。最好使用适当的连接
。在这种情况下,这是一个内部联接