2017-02-23 7 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에 당신이 그 (것) 하시겠습니까? 샘플 입력 전체에 대해 원하는 출력을 표시하십시오. – BeanFrog

+1

값 26 인 checkoutattribute id 9에 하나의 행만 필요합니다. –

답변

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