Sql 将单个逗号分隔行转换为多行
我正在尝试使用以下查询将单个逗号分隔的行列转换为多行:Sql 将单个逗号分隔行转换为多行,sql,sql-server,xml,split,Sql,Sql Server,Xml,Split,我正在尝试使用以下查询将单个逗号分隔的行列转换为多行: SELECT Split.a.value('.', 'VARCHAR(max)') AS String FROM (SELECT CAST ('<M>' + REPLACE(cast([csvdata] as Varchar(max)), ',', '</M><M>') + '</M>' AS XML) AS String FROM
SELECT
Split.a.value('.', 'VARCHAR(max)') AS String
FROM
(SELECT
CAST ('<M>' + REPLACE(cast([csvdata] as Varchar(max)), ',', '</M><M>') + '</M>' AS XML) AS String
FROM
tboutbound
WHERE
id = '30') AS A
CROSS APPLY
String.nodes ('/M') AS Split(a);
但我有一个错误:
XML解析:第2行,字符36,非法名称字符
是否无法更新表和更改数据
有什么建议吗?假设希望数据不包含序列,并且]]>您可以这样做:
SELECT CAST('<M><![CDATA[' + REPLACE([csvdata], ',', ']]></M><M><![CDATA[') + ']]></M>' AS XML)
FROM t
csv数据看起来像什么?您使用的是什么版本的SQL Server?最好的建议是不要一开始就存储此类文本。加载数据时处理文本,并将其正确存储在单独的列中。在SQL Server 2016及更高版本中,您可以使用字符串分割。更好的做法是在加载数据时正确设计表并拆分数据,而不是在数据已经在数据库中之后database@SalmanA无法在此处粘贴数据,但数据包含空格、撇号,并且可能包含一些特殊字符。@PanagiotisKanavos无法更改数据存储方法。我没有使用SQL server 2016。@SalmanA我使用的是SQL server 2014版本12.0.6108.1,或者像这样转义文本:。替换xml路径的select csvdata,类型为“,”,“,”。谢谢你,大卫。来自DB fiddle的查询给出了一些结果,但这不是我所期望的。该查询将一列转换为多行,但其值也仅出现在一列中。e、 g.我有一列和一行正在转换为一列和2000行。结果应为26列多行。