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

SQL Server中如何批量查询列名含指定关键词的所有列数据?

在SQL Server中批量选择列名匹配指定规则的列

要查询表中所有列名包含"year"的列的前10行数据,无需手动逐个罗列列名,可以通过动态SQL结合系统视图实现:

方法1:适用于SQL Server 2017及以上版本

利用STRING_AGG函数快速拼接符合条件的列名:

DECLARE @TableName NVARCHAR(128) = N'Table1'; -- 替换为你的目标表名
DECLARE @SQL NVARCHAR(MAX);

-- 筛选并拼接列名
SELECT @SQL = STRING_AGG(QUOTENAME(name), ', ')
FROM sys.columns
WHERE object_id = OBJECT_ID(@TableName)
  AND name LIKE '%year%';

-- 组装完整查询语句并执行
SET @SQL = N'SELECT TOP 10 ' + @SQL + N' FROM ' + QUOTENAME(@TableName);
EXEC sp_executesql @SQL;

关键说明:

  • sys.columns:存储数据库所有列的元数据,通过object_id关联到目标表
  • QUOTENAME:给列名、表名添加方括号,避免特殊字符或关键字引发语法错误
  • sp_executesql:安全执行动态生成的SQL语句

方法2:兼容SQL Server 2016及更早版本

如果你的版本不支持STRING_AGG,可以用FOR XML PATH实现列名拼接:

DECLARE @TableName NVARCHAR(128) = N'Table1';
DECLARE @SQL NVARCHAR(MAX);

-- 拼接列名
SELECT @SQL = STUFF((
    SELECT ', ' + QUOTENAME(name)
    FROM sys.columns
    WHERE object_id = OBJECT_ID(@TableName)
      AND name LIKE '%year%'
    FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 2, '');

-- 组装并执行查询
SET @SQL = N'SELECT TOP 10 ' + @SQL + N' FROM ' + QUOTENAME(@TableName);
EXEC sp_executesql @SQL;

注意事项:

  • 若表不在默认dbo架构下,需指定完整表名,比如N'YourSchema.YourTable'
  • 确保当前用户拥有查询目标表和系统视图的权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:35:12