我需要从其他表中的xml docs(在关系模型中)插入表数据。我正在使用sql server 2005。
xml的结构示例:
<order id=”123”>
<products>
<product prodId=”2120”>
<name>Product1</name>
<quantity>2</quantity>
</product>
<product prodId=”1200”>
<name>Product2</name>
<quantity>4</quantity>
</product>
<product prodId=”945”>
<name>Product3</name>
<quantity>1</quantity>
</product>
</products>
</order>
...和结果表:
OrderID ProductID Name Quantity
123 2120 Product1 2
123 1200 Product2 4
123 945 Product3 1
我使用openxml工具解决了这个问题,但它有点慢。 我怎么能在XQuery中做到这一点? 解决这类任务的最佳方法是什么?
答案 0 :(得分:0)
DECLARE @xml_str XML =
'<order id="123"> <products>
<product prodId="2120">
<name>Product1</name>
<quantity>2</quantity>
</product>
<product prodId="1200">
<name>Product2</name>
<quantity>4</quantity>
</product>
<product prodId="945">
<name>Product3</name>
<quantity>1</quantity>
</product> </products> </order>'
SELECT
c.value('(../../@id)', 'int') AS OrderID,
c.value('(@prodId)[1]', 'int') AS ProductID,
c.value('(./name)[1]', 'varchar(20)') AS Name,
c.value('(./quantity)[1]', 'int') AS Quantity
FROM @xml_str.nodes ('(/order/products/product)') AS t(c)
GO
OrderID ProductID Name Quantity
----------- ----------- -------------------- -----------
123 2120 Product1 2
123 1200 Product2 4
123 945 Product3 1
(3 row(s) affected)