--含有某字段的所有表
select a.[name] 表名from sysobjects a,
(
select [id],count(*) num from syscolumns
where [name] =[columnName]
group by [id]
) b where a.[id]=b.[id]
--同时含有某些字段的所有表
select a.[name] from sysobjects a
left join
(
select [id],count(*) num from syscolumns where [name]
in([columnName1], [columnName2],…) group by [id] having count(*)>1
) b on a.[id]=b.[id]
where b.id is not null
sysobjects
在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。
列名 | 数据类型 | 描述 |
name | sysname | 对象名。 |
Id | int | 对象标识号。 |
xtype | char(2) | 对象类型。可以是下列对象类型中的一种: C = CHECK 约束 |
syscolumns
每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。
列名 | 数据类型 | 描述 |
name | sysname | 列名或过程参数的名称。 |
id | int | 该列所属的表对象 ID,或与该参数关联的存储过程 ID。 |
xtype | tinyint | systypes 中的物理存储类型。 |