这就是列xml的样子
<Attributes>
<ProductAttribute ID="9">
<ProductAttributeValue>
<Value>21</Value>
</ProductAttributeValue>
</ProductAttribute>
<ProductAttribute ID="10">
<ProductAttributeValue>
<Value>25</Value>
</ProductAttributeValue>
</ProductAttribute>
</Attributes>
我希望像
一样返回它ProductAttribute ProductAttributeValue
--------------------------------------------------
9 21
10 25
我的查询现在看起来像这样
SELECT
ProductId as ProductId,
ProductAttributeNode.value('(@ID)', 'int') as ProductAttributeMappingId,
ProductAttributeNode.value('(//ProductAttributeValue[1]/Value/text())[1]', 'int') as ProductAttributeValueId
FROM
(
SELECT
Id,
ProductId,
CAST(AttributesXml as XML) as AttributesXml,
Sku
FROM
ProductAttributeCombination
) AS PAC
CROSS APPLY AttributesXml.nodes('//Attributes/ProductAttribute') as T1(ProductAttributeNode)
我得到的是
ProductAttribute ProductAttributeValue
--------------------------------------------------
9 21
10 21 <--- not 25
答案 0 :(得分:2)
值方法中的问题是//
,每次从我想到的第一个ProductAttribute
元素看起来。当您知道父元素时,您不需要//
ProductAttributeNode.value('(//ProductAttributeValue[1]/Value/text())[1]', 'int')
应该是
ProductAttributeNode.value('(./ProductAttributeValue[1]/Value)[1]', 'int')