2013-10-25 3 views
3

Мои данные (передаваемые в качестве параметра (@data XML) в хранимой процедуре) выглядит следующим образом:Как получить значения дочерних узлов и ценностей родительского узла в SQL XPath

<Records> 
    <Record id="1"> 
     <Data> 
      <FirstName>John</FirstName> 
      <LastName>Doe</LastName> 
     </Data> 
     <Result> 
      <StatusId>3</StatusId> 
      <ErrorCodes> 
       <Item>4</Item> 
       <Item>23</Item> 
       <Item>19</Item> 
      </ErrorCodes> 
     </Result> 
    </Record> 
    <Record id="2"> 
     <Data> 
      <FirstName>Fred</FirstName> 
      <LastName>Blog</LastName> 
     </Data> 
     <Result> 
      <StatusId>2</StatusId> 
      <ErrorCodes> 
       <Item>1</Item> 
       <Item>3</Item> 
      </ErrorCodes> 
     </Result> 
    </Record> 
</Records> 

Я хочу, чтобы выбрать идентификатор записи и коды ошибок, например:

id Item 
---------- 
1  4 
1  23 
1  19 
2  1 
2  3 

Порядок данных не имеет значения.

Следующая получает мне коды ошибок, но не идентификатор записи:

SELECT Data.value('.', 'int') as ErrorCode 
FROM @Data.nodes('/Records/Record/Result/ErrorCodes/*') AS data(Data) 
+0

@OzrenTkalcecKrznaric Извините, что не включая эту информацию. Теперь я отредактировал свой вопрос в i nclude, что у меня есть до сих пор. – Matt

ответ

3

Это выражение вы должны получить родителя из-родителя-из-родительского элемента:

Data.query('../../..') 

.. .so попробуй что-нибудь вроде этого (непроверенный) ...

SELECT 
    id = Data.value('../../../@id', 'int'), 
    item = Data.value('.', 'int') 
FROM @Data.nodes('/Records/Record/Result/ErrorCodes/*') AS data(Data) 
Смежные вопросы