我正在寻找一种可以使用多个SQL查询查询数据库的方法,然后,一旦我获得了查询结果(在XML中),就可以使用反向路径将单独的XML合并到一个XML文档中。我这样做的原因与并行细节的概念有关(相同的数据,应用了不同的操作)。
例如,3个查询:
SELECT * FROM Customer;
SELECT * FROM Purchase_order;
SELECT * FROM Line_Item;
查询1结果:
<customer>
<cust_id>2</cust_id>
<fname>John</fname>
<lname>Doe</lname>
</customer>
查询2结果:
<purchase_order>
<order_id>2</order_id>
<cust_id>2</cust_id>
<shipped>7/7/2009</shipped>
</purchase_order>
查询3结果:
<line_item>
<line_id>2</line_id>
<order_id>2</order_id>
<quantity>7</quantity>
</line_item>
期望的输出:
<collection>
<customer>
<cust_id>2</cust_id>
<fname>John</fname>
<lname>Doe</lname>
</customer>
<purchase_order>
<order_id>2</order_id>
<cust_id>2</cust_id>
<shipped>7/7/2009</shipped>
</purchase_order>
<line_item>
<line_id>2</line_id>
<order_id>2</order_id>
<quantity>7</quantity>
</line_item>
</collection>
这看起来很容易,但我的SQL查询可以返回很多客户,以及大量的采购订单和订单项,我需要能够将它们全部匹配。
我不能使用一个带有连接的SQL查询,它将立即收集所有这些信息。
有没有人见过这样的事情?有什么想法吗?
感谢。
答案 0 :(得分:1)
除了XML格式之外,看起来你想要的是查询订单项表并加入采购订单和客户表。
SELECT * FROM Line_Item li
join Purchase_Order po on li.order_id on po.order_id
join Customer c = po.cust_id on c.cust_id
这将为您提供包含采购订单和客户信息内联的订单项的结果集。如果您使用服务器功能将其呈现为XML,那么您可能会得到类似
的内容<line_item>
<line_id>2</line_id>
<quantity>7</quantity>
<order_id>2</order_id>
<shipped>7/7/2009</shipped>
<fname>John</fname>
<lname>Doe</lname>
</line_item>
答案 1 :(得分:1)
SQL Server的FOR XML子句,给定此输入
SELECT
*
FROM
Customer
INNER JOIN Purchase_order ON Purchase_order.cust_id = Customer.cust_id
INNER JOIN Line_Item ON Line_Item.order_id = Purchase_order.order_id
FOR XML AUTO, ELEMENTS;
生成(我添加了另一个项目来展示如何生成):
<Customer>
<cust_id>2</cust_id>
<fname>John</fname>
<lname>Doe</lname>
<Purchase_order>
<order_id>2</order_id>
<cust_id>2</cust_id>
<shipped>2009-07-07T00:00:00</shipped>
<Line_Item>
<line_id>2</line_id>
<order_id>2</order_id>
<quantity>7</quantity>
</Line_Item>
<Line_Item>
<line_id>3</line_id>
<order_id>2</order_id>
<quantity>1</quantity>
</Line_Item>
</Purchase_order>
</Customer>
这不是完全你想要的方式,但也许这是一个开始。
答案 2 :(得分:1)
这将完全满足您的需求:
SELECT
CONVERT(XML,
(SELECT cust_id, fname, lname FROM Customer FOR XML PATH('customer'))),
CONVERT(XML,
(SELECT order_id, cust_id, shipped FROM Purchase_order FOR XML PATH('purchase_order'))),
CONVERT(XML,
(SELECT line_id, order_id, quantity FROM Line_Item FOR XML PATH('line_item')))
FOR XML PATH('collection')