sql - SQL Server 中 FOR 附近的语法不正确
问题描述
,
我正在尝试使用SQL Server 中的逗号分隔符将多行列转换为单行。
我尝试了这段代码,但出现解析错误:
SELECT ID + ', ' As 'Data()'
FROM Test_schema.Table_name
FOR XML PATH('')
其中test_schema
是架构名称,Table_name
是具有 2000 个不同 ID 和 8 列的表名。
我在这里做错了什么?
解决方案
首先,您拥有的 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;
推荐阅读
- postgresql - 在新服务器中导入 postgreSQL 数据库时出现问题
- google-data-studio - 附加分区表格并混合到同一个 Google Data Studio 数据源中?
- python - 正则表达式:匹配 char + new line before (new line new line)
- python - 在 Python 中使用 Map-Reduce 实现 ARIMA 或 Holt Winter
- c++ - 数组c ++之间的比较
- javascript - 期望一个赋值或函数调用,而是看到一个表达式:Calling function in a return statement
- python - 使用 joblib 加载经过训练的大型机器学习模型
- c++ - 我在连接这些字符串时遇到问题
- c++ - 静态链接外部库问题 - Visual Studio 2019
- spring-boot - 使用 gradle 的 2 个不同构建:一个 spring boot 和一个 non sping boot 可执行文件