T-SQL XML Query, как разделить соответствующие узлы на отдельные строки? - PullRequest
0 голосов
/ 08 апреля 2010

У меня есть таблица, в которой есть столбец, полный XML, например:

<parent>
   <child>
      <name>Sally</name>
   </child>
   <child>
      <name>Bobby</name>
   </child>
</parent>

Я пытаюсь извлечь все имена детей в отдельные строки.Мой желаемый набор результатов будет выглядеть так:

   Sally
   Bobby

Однако, если я сделаю что-то вроде:

SELECT data.query('data(//parents/child/name)') FROM stuff

, я получу одну строку, которая выглядит как

Sally Bobby

Что я делаю не так с XPath?

РЕДАКТИРОВАТЬ: не реальная схема или данные, просто пример.Кроме того, я не могу просто разбить на пробелы.

Ответы [ 2 ]

0 голосов
/ 17 июня 2010

Вот, пожалуйста:

create table #t (data xml)


insert #t values ('
<parent>
   <child>
      <name>Sally</name>
   </child>
   <child>
      <name>Bobby</name>
   </child>
</parent>
')


insert #t values ('
<parent>
   <child>
      <name>Fred</name>
   </child>
   <child>
      <name>Bill</name>
   </child>
</parent>
')


select C.* from #t 
cross apply 
 (select name.value('name[1]', 'varchar(255)') as [Name] 
    from data.nodes('//parent/child') as c(name)) as C

1004 *

0 голосов
/ 08 апреля 2010

Я думаю, вы хотите посмотреть на CROSS APPLY:

http://www.sqlteam.com/article/using-cross-apply-in-sql-server-2005

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