Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 将单个逗号分隔行转换为多行_Sql_Sql Server_Xml_Split - Fatal编程技术网

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列多行。