Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 此查询如何在sql server中将csv拆分为行?_Sql Server - Fatal编程技术网

Sql server 此查询如何在sql server中将csv拆分为行?

Sql server 此查询如何在sql server中将csv拆分为行?,sql-server,Sql Server,我正在使用sql server 2012 这是一个问题 drop table #t create table #t(id int,name varchar(10)) insert into #t values(1,'a,b,c'),(2,'d,e') select A.id,split.a.value('.','varchar(10)') as string from (select id,cast('<M>'+replace([name],',','</M>

我正在使用sql server 2012

这是一个问题

drop table #t
create table #t(id int,name varchar(10))
insert into #t values(1,'a,b,c'),(2,'d,e')

select A.id,split.a.value('.','varchar(10)') as string 
from 
    (select id,cast('<M>'+replace([name],',','</M><M>')+'</M>' as xml) as string from #t) as A  cross apply string.nodes('/M') as split(a)
我试图获得这里使用的查询逻辑,但无法理解它是如何工作的

有人能引导我理解这个故事吗


cast子句和split.a.value中的逻辑cast子句将字符串转换为XML片段,稍后由“nodes”方法使用。如果只运行子查询:

select id,cast('<M>'+replace([name],',','</M><M>')+'</M>' as xml) as string 
from #t
您将得到以下结果:

id  string
1   <M>a</M><M>b</M><M>c</M>
2   <M>d</M><M>e</M>
Node方法将XML数据拆分为关系形式。为了过分简化,Nodes方法提供了一个带有列“a”的表“Split”。Value方法最终将节点中的值转换为用于投影的varchar: split.A.value'.'和'varchar10'可以解释为Table.Column.Valueroot到varchar10

有关更多信息,请参阅以下链接:

节点方法:

价值法: