You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用SQL Server查询数据库中含指定列的所有表?

查询SQL Server中包含指定列的所有表

嘿,刚好我经常碰到这类需求,给你分享几个实用的查询方式,轻松找出数据库里所有包含指定列名的表:

方法1:使用系统目录视图(sys.tables + sys.columns)

这是我平时用得最多的方式,系统视图能提供更丰富的元数据信息:

DECLARE @ColumnName NVARCHAR(128) = N'你的列名'; -- 替换成你要查找的列名

SELECT 
    SCHEMA_NAME(t.schema_id) AS 表架构,
    t.name AS 表名,
    c.name AS 列名
FROM 
    sys.tables t
JOIN 
    sys.columns c ON t.object_id = c.object_id
WHERE 
    c.name = @ColumnName
ORDER BY 
    表架构, 表名;

把上面的@ColumnName替换成你要找的列名就行,结果会返回表的架构、表名和对应的列名,排序后看起来更清晰。

方法2:使用INFORMATION_SCHEMA视图(ANSI标准)

如果你习惯用符合ANSI标准的查询方式,这个更通用,在不同的数据库系统里语法更接近:

DECLARE @ColumnName NVARCHAR(128) = N'你的列名'; -- 替换成你要查找的列名

SELECT 
    TABLE_SCHEMA AS 表架构,
    TABLE_NAME AS 表名,
    COLUMN_NAME AS 列名
FROM 
    INFORMATION_SCHEMA.COLUMNS
WHERE 
    COLUMN_NAME = @ColumnName
ORDER BY 
    TABLE_SCHEMA, TABLE_NAME;

这个查询的结果和第一种方法差不多,好处是语法更通用,如果你需要跨数据库迁移查询的话更方便。

扩展:获取更多列信息

如果还想知道列的数据类型、是否允许为空等细节,可以扩展查询:

DECLARE @ColumnName NVARCHAR(128) = N'你的列名';

SELECT 
    SCHEMA_NAME(t.schema_id) AS 表架构,
    t.name AS 表名,
    c.name AS 列名,
    ty.name AS 数据类型,
    c.max_length AS 最大长度,
    c.is_nullable AS 是否允许为空
FROM 
    sys.tables t
JOIN 
    sys.columns c ON t.object_id = c.object_id
JOIN 
    sys.types ty ON c.system_type_id = ty.system_type_id
WHERE 
    c.name = @ColumnName
ORDER BY 
    表架构, 表名;

这样就能拿到更全面的列属性信息,排查问题的时候特别有用。

内容的提问来源于stack exchange,提问作者Mr. N. Das

火山引擎 最新活动