这是我的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输入找到方法或解决方案。 任何帮助表示赞赏。感谢。
答案 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)
但是逐步向下移动树更清洁,性能更好......