You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SQL Server自定义内联函数结果格式化为逗号分隔数组

嘿,我来帮你搞定这个需求!要把自定义函数tblServicesByHost的返回结果转成逗号分隔的数组,根据你使用的SQL Server版本,这里有两种实用的方法:

方法1:SQL Server 2017及以上版本(推荐用STRING_AGG)

SQL Server 2017引入了原生的字符串聚合函数STRING_AGG,用起来简洁又高效。假设你要聚合的是HostGroupName列(如果是其他列,直接替换成对应的列名就行),可以这么写:

-- 基础用法
SELECT STRING_AGG(HostGroupName, ', ') AS CommaSeparatedArray
FROM dbo.tblServicesByHost(@YourServiceId);

如果返回结果里有重复值,想要去重的话,加上DISTINCT即可:

-- 去重后的聚合
SELECT STRING_AGG(DISTINCT HostGroupName, ', ') AS CommaSeparatedArray
FROM dbo.tblServicesByHost(@YourServiceId);

方法2:SQL Server 2016及以下版本(用FOR XML PATH拼接)

如果你的SQL Server版本比较旧,不支持STRING_AGG,就用传统的FOR XML PATH拼接方式来实现:

-- 基础用法
SELECT STUFF(
    (SELECT ', ' + HostGroupName
     FROM dbo.tblServicesByHost(@YourServiceId)
     FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),
    1, 2, ''
) AS CommaSeparatedArray;

同样,需要去重的话在子查询里加上DISTINCT:

-- 去重后的拼接
SELECT STUFF(
    (SELECT DISTINCT ', ' + HostGroupName
     FROM dbo.tblServicesByHost(@YourServiceId)
     FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),
    1, 2, ''
) AS CommaSeparatedArray;

注意事项

  • 记得把代码里的HostGroupName替换成你实际需要聚合的列(比如NagiosHostGroups或者IdService)
  • @YourServiceId要换成你传给函数的实际参数值

内容的提问来源于stack exchange,提问作者aag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:03:41