2017-02-23 39 views
0

SQL Serverで条件付きの子値とその属性値を取得する方法。 XMLデータを次からこのSQL Serverの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チェックアウトは、各チェックアウト属性の属性値を持っている - 1行または2にあなたがそれらたいですか?あなたのサンプル入力全体に対して、望ましい出力を表示してください。 – BeanFrog

+1

値26のcheckoutattribute id 9には1行だけが必要です。 –

答えて

1
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

こんにちはマザー、こんにちは.nodes( '/ Attributes/CheckoutAttribute [@ ID = "9"]') ' 'sql:column()またはsql:variable()')を使用します。あなたのソリューションは、たくさんのものを読まなければならず、ちょうどそのほとんどを投げ捨てる必要があります... – Shnugo

関連する問題