首页 > 解决方案 > SQL Server 中 FOR 附近的语法不正确

问题描述

,我正在尝试使用SQL Server 中的逗号分隔符将多行列转换为单行。

我尝试了这段代码,但出现解析错误:

SELECT ID + ', ' As 'Data()'
FROM Test_schema.Table_name 
FOR XML PATH('')

其中test_schema是架构名称,Table_name是具有 2000 个不同 ID 和 8 列的表名。

我在这里做错了什么?

标签: sqlsql-servertsql

解决方案


首先,您拥有的 SQL 不会产生您所说的错误。如果您尝试运行上述程序,则会收到以下错误:

列名“Data()”包含 FOR XML 要求的无效 XML 标识符;'('(0x0028) 是第一个错误字符。

这是因为 XML 节点的名称中不能有括号 ( ())。

但是,听起来您甚至不应该使用别名,因为您想要表中所有ID's 的串联列表。如果是这样,那么您的查询实际上应该如下所示:

SELECT STUFF((SELECT CONCAT(', ',ID) --I assume ID could be a non-string type
              FROM Test_schema.Table_name 
              FOR XML PATH(''),TYPE).value('(./text())[1]','nvarchar(MAX)'),1,2,N'');

但是,如果您使用的是更新版本的 SQL Server,只需我们STRING_AGG

SELECT STRING_AGG(ID,', ')
FROM Test_schema.Table_name;

推荐阅读