from syscolumns as col
inner join sysobjects as tab on col.id=tab.id
where col.name='bm'
查询列名在哪一个表col.name=“列名”
在 MSSQL 中,已知列名需查找其所属数据表,可通过以下方法实现:
方法一:使用 INFORMATION_SCHEMA.COLUMNS
系统视图
此方法为标准 SQL 实现,适用于所有兼容 SQL 标准的数据库(包括 MSSQL),语法如下:
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'YourColumnName';
- 说明:替换
YourColumnName
为目标列名,结果将返回包含该列的所有表名。 - 扩展:若需同时获取数据库名及列数据类型,可添加字段
TABLE_SCHEMA
和DATA_TYPE
。
方法二:通过 sys.columns
和 sys.tables
系统表
此方法基于 MSSQL 特有的系统视图,可获取更底层信息:
SELECT t.name AS TableName FROM sys.tables t JOIN sys.columns c ON t.object_id = c.object_id WHERE c.name = 'YourColumnName';
- 说明:通过关联系统表
sys.tables
和sys.columns
,精准定位列所属表。 - 详细信息:若需列的数据类型或架构名,可扩展查询字段:
SELECT t.name AS TableName, c.name AS ColumnName, ty.name AS DataType FROM sys.tables t JOIN sys.columns c ON t.object_id = c.object_id JOIN sys.types ty ON c.user_type_id = ty.user_type_id WHERE c.name = 'YourColumnName'; ```:ml-citation{ref="3" data="citationList"}
方法三:兼容旧版本 MSSQL 的查询方式
针对早期版本(如 SQL Server 2000),可使用 sysobjects
和 syscolumns
:
SELECT OBJECT_NAME(id) AS TableName FROM syscolumns WHERE name = 'YourColumnName' AND id IN (SELECT id FROM sysobjects WHERE xtype = 'U');
- 说明:
sysobjects.xtype = 'U'
用于筛选用户表。
注意事项
- 列名大小写:MSSQL 默认不区分大小写,但若数据库设置为区分大小写,需确保列名匹配。
- 限定数据库:若需指定数据库,可在查询中限定
TABLE_SCHEMA
或使用全限定名(如DatabaseName.INFORMATION_SCHEMA.COLUMNS
)。 - 权限要求:需对系统视图(如
INFORMATION_SCHEMA
、sys.tables
)有查询权限。
发表评论