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
相关产品推荐
相关产品推荐

