xQuery и T-SQL для извлечения данных - PullRequest
1 голос
/ 12 ноября 2010

Получил некоторый базовый XML как тип данных XML в SQL 2005. Одна запись / строка выглядит следующим образом

<doc>
  <level1>

    <level2>
      <name>James</name>
      <age>12</age>
    </level2>

    <level2>
      <name>John</name>
      <age>23</age>
    </level2>

  </level1>
</doc>

Когда я выполняю некоторые базовые T_SQL

SELECT TOP 1 
DocumentXML.query('data(//doc/name)'),
DocumentXML.query('data(//doc/age)')
FROM [DBNAME].[dbo].[TBLNAME]

Я получаю

ID  |  Name     | Age
----------------------
1   | JamesJohn | 1223

Как переписать T-SQL, чтобы он отображался как

ID  |  Name  |  Age
--------------------
1   |  James |  12
2   |  John  |  23

1 Ответ

5 голосов
/ 12 ноября 2010

Ваш пример не работает для меня; второй уровень2 открывается с </level2>. И //doc/name не существует; может быть //doc/level1/level2/name.

Вот пример того, как извлечь набор строк из XML:

declare @t table (id int identity, doc xml)
insert @t (doc) values (
    '<doc>
      <level1>

        <level2>
          <name>James</name>
          <age>12</age>
        </level2>

        <level2>
          <name>John</name>
          <age>23</age>
        </level2>

      </level1>
    </doc>')

SELECT  x.a.value('(name)[1]','varchar(50)') as col1
,       x.a.value('(age)[1]','varchar(50)') as col2
FROM    @t t
cross apply
        t.doc.nodes('//level2') x(a)

Это печатает:

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