【问题标题】:Getting an error when using string_agg in sqlserver 2016 [duplicate]在 sql server 2016 中使用 string_agg 时出错 [重复]
【发布时间】:2019-08-13 08:35:33
【问题描述】:

我有一个 sql 存储的 preocedure,我试图在其中使用 string_agg 函数。当我尝试创建存储过程时出现错误

Msg 195,级别 15,状态 10,Procedure MamographyDaily,第 18 行 [Batch 开始第 7 行]“STRING_AGG”不是可识别的内置函数名称。

我正在使用 SQL 2017 管理工作室运行 SQLserver 2016

【问题讨论】:

  • STRING_AGG 在 SQL Server 2017 中引入。
  • Management studio 版本无关——重要的是数据库兼容级别——string_agg 至少需要140——而SQL Server 2016 的最高兼容级别是130。
  • 非常烦人的是,如果你将 SQL Server 2017 设置为兼容模式 130,那么它允许你使用 STRING_AGG,然后当你将它放在真正的 2016 服务器上时它会失败

标签: sql-server


【解决方案1】:

STRING_AGG 仅在您使用 Sql Server 2017 版及更高版本时受支持。

参考:STRING_AGG

注意:如果您使用的是以下版本,您可以使用FOR XML PATH()实现它

示例

样本数据

 Field A | Field B
    1       |  A
    1       |  B
    2       |  A

所需输出

1 | AB
2 | A

查询

select distinct t1.FieldA,
  STUFF((SELECT distinct '' + t2.FieldB
         from yourtable t2
         where t1.FieldA = t2.FieldA
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,0,'') data
from yourtable t1;

【讨论】:

  • 早期版本有没有等价的功能或者你会怎么做?
  • 你可以通过FOR XML PATH()来实现。让我用一个例子来更新答案
猜你喜欢
  • 1970-01-01
  • 2019-06-30
  • 2021-09-08
  • 2020-01-12
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
相关资源
最近更新 更多