T-SQLXML查询,如何将匹配的节点分割成单独的行?
我有一个表,其中有一列充满XML,如: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/
<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