如何从sql服务器中的xml数据中获取条件的子元素和属性值?

问题描述:

如何在sql server中以条件获取子值及其属性值? 如何从以下XML数据得到这个如何从sql服务器中的xml数据中获取条件的子元素和属性值?

<CheckoutAttribute ID="9"> 
<CheckoutAttributeValue><Value>26</Value></CheckoutAttributeValue> 
CheckoutAttributeID CheckoutAttributeValue 
     9     26

<Attributes> 
<CheckoutAttribute ID="4"> 
<CheckoutAttributeValue><Value>18</Value></CheckoutAttributeValue> 
</CheckoutAttribute> 
<CheckoutAttribute ID="6"> 
<CheckoutAttributeValue><Value>22</Value></CheckoutAttributeValue> 
<CheckoutAttributeValue><Value>23</Value></CheckoutAttributeValue> 
</CheckoutAttribute> 
<CheckoutAttribute ID="9"> 
<CheckoutAttributeValue><Value>26</Value></CheckoutAttributeValue> 
<CheckoutAttributeValue><Value>27</Value></CheckoutAttributeValue> 
</CheckoutAttribute> 
<CheckoutAttribute ID="1"> 
<CheckoutAttributeValue><Value>1</Value></CheckoutAttributeValue> 
</CheckoutAttribute> 
</Attributes> 
+0

有时候你有2个结帐属性值对每个结帐属性 - 做你想让他们在一排或2?请为您的整个样本输入显示所需的输出。 – BeanFrog

+1

我只想要一行checkoutattribute id 9的值为26. –

CREATE TABLE #tempTable (id INT IDENTITY(1,1), xmlDataTest xml) 
INSERT INTO #TempTable (xmlDataTest) 
VALUES ('<Attributes> 
<CheckoutAttribute ID="4"> 
<CheckoutAttributeValue><Value>18</Value></CheckoutAttributeValue> 
</CheckoutAttribute> 
<CheckoutAttribute ID="6"> 
<CheckoutAttributeValue><Value>22</Value></CheckoutAttributeValue> 
<CheckoutAttributeValue><Value>23</Value></CheckoutAttributeValue> 
</CheckoutAttribute> 
<CheckoutAttribute ID="9"> 
<CheckoutAttributeValue><Value>26</Value></CheckoutAttributeValue> 
<CheckoutAttributeValue><Value>27</Value></CheckoutAttributeValue> 
</CheckoutAttribute> 
<CheckoutAttribute ID="1"> 
<CheckoutAttributeValue><Value>1</Value></CheckoutAttributeValue> 
</CheckoutAttribute> 
</Attributes>') 

SELECT r.value('@ID','int') AS CheckoutAttributeID 
     , r.query('data(CheckoutAttributeValue/Value)[1]') AS CheckoutAttributeValue 
FROM #tempTable 
CROSS APPLY xmlDataTest.nodes('/Attributes/CheckoutAttribute') AS x(r) 
WHERE 
r.value('@ID','int') = 9 

DROP TABLE #tempTable 
+1

嗨manderson,在这种情况下,最好使用'.nodes('/ Attributes/CheckoutAttribute [@ID =“9”]')(或引入此值用'sql:column()或sql:variable()')。你的解决方案必须阅读全部内容,只是将大部分内容扔掉...... – Shnugo