将由逗号分隔的字段内容分成多行,在SQL Server中使用XML时,这些SQL的含义是什么?
在SQL Server中,我想将由逗号分隔的列的内容分成多行。例如将由逗号分隔的字段内容分成多行,在SQL Server中使用XML时,这些SQL的含义是什么?,sql,sql-server,xml,Sql,Sql Server,Xml,在SQL Server中,我想将由逗号分隔的列的内容分成多行。例如 id value ----------------------- 1 aa,bb 2 aaa,bbb,ccc 将值除以id后,结果应如下所示: id value ---------------- 1 aa 1 bb 2 aaa 2 bbb 2 ccc 我
id value
-----------------------
1 aa,bb
2 aaa,bbb,ccc
将值除以id后,结果应如下所示:
id value
----------------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
我找到的SQL语句如下:
create table tb(id int, value varchar(30))
insert into tb values(1,'aa,bb')
insert into tb values(2,'aaa,bbb,ccc')
go
SELECT A.id, B.value
FROM
(SELECT
id, [value] = CONVERT(xml,' <root> <v>' + REPLACE([value], ',', '
</v> <v>') + ' </v> </root>')
FROM
tb) A
OUTER APPLY
(SELECT
value = N.v.value('.', 'varchar(100)')
FROM
A.[value].nodes('/root/v') N(v)
) B
N.v的推断是什么?N.v.value“.”、“varchar100”、nodes“/root/v”和最后一个Nv的含义是什么 节点查询的语法不是
节点XQuery作为TableColumn
根据您的查询,N是表的别名,v是列的名称
Query value.node/root/v mean value是XML,xpath/root/v值存储在表N的v列中
即
其中Tc T是表的别名,c是列 节点查询的语法不是
节点XQuery作为TableColumn
根据您的查询,N是表的别名,v是列的名称
Query value.node/root/v mean value是XML,xpath/root/v值存储在表N的v列中
即
其中Tc T是表的别名,c是列
SELECT value = N.v.value('.', 'varchar(100)')
FROM A.[value].nodes('/root/v') N(v)
DECLARE @x xml
SET @x='<Root>
<row id="1"><name>Larry</name><oflw>some text</oflw></row>
<row id="2"><name>moe</name></row>
<row id="3" />
</Root>'
SELECT T.c.query('.') AS result
FROM @x.nodes('/Root/row') T(c)
GO