将XML转换为SQL Server表

时间:2016-09-07 15:42:53

标签: sql-server xml xquery

这是我的XML格式:

<ROOT>
<Orders>
    <OrderID>423</OrderID>
    <ProductID>54</ProductID>
    <ProductID>23</ProductID>
</Orders>
<Orders>
    <OrderID>523</OrderID>
    <ProductID>5</ProductID>
    <ProductID>26</ProductID>
</Orders>

我想以下面的格式输出我的输出

OrderID         ProductID   
423             54  
423             23
523             5
523             26

我找到了帮助我从XML读取属性并将其转换为SQL表的方法。但是没有为我的XML输入找到方法或解决方案。 任何帮助表示赞赏。感谢。

1 个答案:

答案 0 :(得分:3)

尝试这样

DECLARE @xml XML=
'<ROOT>
<Orders>
    <OrderID>423</OrderID>
    <ProductID>54</ProductID>
    <ProductID>23</ProductID>
</Orders>
<Orders>
    <OrderID>523</OrderID>
    <ProductID>5</ProductID>
    <ProductID>26</ProductID>
</Orders>
</ROOT>';

SELECT  Ord.value('OrderID[1]','int') AS OrderID
       ,Prod.value('.','int') AS ProductID
FROM @xml.nodes('/ROOT/Orders') AS A(Ord)
CROSS APPLY A.Ord.nodes('ProductID') AS B(Prod)

由于您的行距值是ProductID,因此您需要nodes() - 调用此权限。可以只使用一个.nodes('/ROOT/Orders/ProductID')并通过向后移动找到相应的OrderID:

SELECT  Prod.value('(../OrderID)[1]','int') AS OrderID
       ,Prod.value('.','int') AS ProductID
FROM @xml.nodes('/ROOT/Orders/ProductID') AS  B(Prod)

但是逐步向下移动树更清洁,性能更好......