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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:40:41