SQL Server中多数据库多表按列名关键词查询库表列信息
在SQL Server中跨数据库查询包含指定关键词的列信息
要找出所有数据库里列名含指定关键词的列、表及对应数据库名,可以借助SQL Server的系统视图结合动态SQL实现,以下是具体方案:
示例脚本(查找列名含ID的信息)
DECLARE @SearchKeyword NVARCHAR(100) = '%ID%'; -- 替换为目标关键词,支持通配符 DECLARE @DynamicSQL NVARCHAR(MAX) = N''; -- 生成各数据库的查询语句并拼接为UNION ALL形式 SELECT @DynamicSQL += N' SELECT DB_NAME(' + CAST(database_id AS NVARCHAR) + N') AS 数据库名, t.name AS 表名, c.name AS 列名 FROM ' + QUOTENAME(name) + N'.sys.tables t JOIN ' + QUOTENAME(name) + N'.sys.columns c ON t.object_id = c.object_id WHERE c.name LIKE ' + QUOTENAME(@SearchKeyword, '''') + N' ' + CASE WHEN LEAD(name) OVER (ORDER BY name) IS NOT NULL THEN N'UNION ALL' ELSE N'' END FROM sys.databases WHERE state = 0 -- 仅查询在线状态的数据库 AND name NOT IN ('master', 'tempdb', 'model', 'msdb'); -- 排除系统库,可按需调整 -- 执行动态SQL EXEC sp_executesql @DynamicSQL;
关键说明
- 脚本会自动遍历所有在线的非系统数据库,可修改
WHERE子句中的name NOT IN部分来添加/移除特定数据库 @SearchKeyword支持SQL通配符,比如'%ID%'匹配包含ID的列名,'ID%'匹配以ID开头的列名- 执行脚本需要具备VIEW DEFINITION权限,以及对目标数据库的访问权限
- 若需包含系统库,直接删除
AND name NOT IN ('master', 'tempdb', 'model', 'msdb')即可
内容的提问来源于stack exchange,提问作者Joan M. Susana
相关产品推荐
相关产品推荐

