T-SQLXML查询,如何将匹配的节点分割成单独的行?

T-SQLXML查询,如何将匹配的节点分割成单独的行?,xml,tsql,xpath,Xml,Tsql,Xpath,我有一个表,其中有一列充满XML,如: <parent> <child> <name>Sally</name> </child> <child> <name>Bobby</name> </child> </parent> 但是,如果我做了如下操作: SELECT data.query('data(//parents/child/

我有一个表,其中有一列充满XML,如:

<parent>
   <child>
      <name>Sally</name>
   </child>
   <child>
      <name>Bobby</name>
   </child>
</parent>
但是,如果我做了如下操作:

SELECT data.query('data(//parents/child/name)') FROM stuff
我得到一排看起来像

Sally Bobby
XPath有什么问题吗


编辑:不是真正的模式或数据,只是一个示例。此外,我不能简单地在空格上拆分。

我认为您需要研究交叉应用:

给你:

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

注意,我通过以下途径找到了你的问题:所以别忘了投票:
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