如何使用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




