select tab.name
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_SCHEMADATA_TYPE

方法二:通过 sys.columnssys.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.tablessys.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),可使用 sysobjectssyscolumns

SELECT OBJECT_NAME(id) AS TableName FROM syscolumns WHERE name = 'YourColumnName' AND id IN (SELECT id FROM sysobjects WHERE xtype = 'U');
  • 说明‌:sysobjects.xtype = 'U' 用于筛选用户表

注意事项

  1. 列名大小写‌:MSSQL 默认不区分大小写,但若数据库设置为区分大小写,需确保列名匹配
  2. 限定数据库‌:若需指定数据库,可在查询中限定 TABLE_SCHEMA 或使用全限定名(如 DatabaseName.INFORMATION_SCHEMA.COLUMNS
  3. 权限要求‌:需对系统视图(如 INFORMATION_SCHEMAsys.tables)有查询权限