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

SQL Server 18中如何动态选取静态字符串+列值组成的列?

解决SQL Server动态选取拼接列名的问题

核心思路

要实现动态选取「静态字符串+TABLE1.value」拼接而成的列,关键是先收集所有目标列名,再构造并执行动态SQL语句。

具体代码实现

-- 声明变量存储拼接后的列列表
DECLARE @columns NVARCHAR(MAX);
DECLARE @sql NVARCHAR(MAX);

-- 收集所有目标列名,用STRING_AGG拼接成逗号分隔的字符串
SELECT @columns = STRING_AGG(QUOTENAME(CONCAT('static_string', T1.value)), ', ')
FROM TABLE1 AS T1;

-- 构造动态查询语句
SET @sql = N'SELECT ' + @columns + N' FROM TABLE1;';

-- 执行动态SQL
EXEC sp_executesql @sql;

关键点说明

  • STRING_AGG函数(SQL Server 2017及以上版本支持,你的SQL Server 18/2019完全兼容)可直接将多行列名拼接成逗号分隔的列表,替代传统游标或循环拼接的繁琐方式。
  • QUOTENAME用于处理列名中的特殊字符,避免SQL语法错误。
  • sp_executesql比直接使用EXEC更安全,支持参数化,适配复杂动态SQL场景。

特殊情况处理

如果TABLE1中存在重复的拼接列名,可在子查询中先去重:

SELECT @columns = STRING_AGG(QUOTENAME(CONCAT('static_string', T1.value)), ', ')
FROM (SELECT DISTINCT value FROM TABLE1) AS T1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:15:38