Как читать XML в T-SQL? - PullRequest
       17

Как читать XML в T-SQL?

2 голосов
/ 25 января 2012

Может кто-нибудь сказать мне, как я могу выбрать значения из следующего XML: Я хотел бы получить строки следующим образом: Col1: ключ, Col2: ключ, Col3: значение

1 1 value
1 2 value2
1 3 value3

2 4 value4
2 5 value5
2 6 value6

Вот XML:

<root>
  <item>
    <key>1</key>
    <value>
      <params>
        <item>
          <key>1</key>
          <value>value</value>      
        </item>
        <item>
          <key>2</key>
          <value>value2</value>     
        </item>     
        <item>
          <key>3</key>
          <value>value3</value>     
        </item>     
      </params>
    </value>
  </item>
  <item>
    <key>2</key>
    <value>
      <params>
        <item>
          <key>4</key>
          <value>value4</value>     
        </item>
        <item>
          <key>5</key>
          <value>value5</value>     
        </item>     
        <item>
          <key>6</key>
          <value>value6</value>     
        </item>     
      </params>
    </value>
  </item>  
</root>

1 Ответ

8 голосов
/ 25 января 2012

Если у вас есть этот XML в переменной T-SQL - тогда вы можете использовать этот фрагмент кода:

DECLARE @input XML = '...(your XML here).....'

SELECT
    Key1 = Item.value('(key)[1]', 'int'),
    Key2 = Item2.value('(key)[1]', 'int'),
    ItemValue = Item2.value('(value)[1]', 'varchar(50)')
FROM 
    @input.nodes('/root/item') AS T(Item)
CROSS APPLY
    item.nodes('value/params/item') AS T2(Item2)

Это дает мне вывод:

Key1  Key2  ItemValue
 1     1     value
 1     2     value2
 1     3     value3
 2     4     value4
 2     5     value5
 2     6     value6  

Подход заключается в следующем:

  • захватить список <item> узлов в <root> как ваш первый «список узлов XML» с первым .nodes() методом XQuery и извлечьзначение XML-элемента <key> в этом фрагменте XML в Key1

  • захватить «вложенный» список узлов XML внутри этого фрагмента XML, используя value/params/item XPath, чтобыполучить дочерние строки - и извлечь значения из <key> и <value> из этих вложенных дочерних XML-фрагментов в Key2 и ItemValue

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...