我正在疯狂地找到一个SQL或T-SQL查询来获取数据库/模式中具有给定名称列的所有表的名称。
有人可以帮我吗?
提前致谢:)
答案 0 :(得分:5)
这将在当前/活动数据库中找到您所关注的列。如果您在不同的数据库中,只需在INFORMATION_SCHEMA.COLUMNS
前加上数据库名称(例如dbname.INFORMATION_SCHEMA.COLUMNS
)
DECLARE @Schema varchar(max)
DECLARE @Column varchar(max)
SET @Schema = NULL
SET @Column = 'primary_id'
SELECT DISTINCT
TABLE_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = @Column
AND
(
@Schema IS NULL
OR TABLE_SCHEMA = @Schema
)
这将在SQL Server中运行,并且也应该在其他DBMS中工作,因为INFORMATION_SCHEMA有些标准化(例如,它在MySql中:http://dev.mysql.com/doc/refman/5.0/en/columns-table.html)
答案 1 :(得分:4)
您可以使用INFORMATION_SCHEMA.COLUMNS
系统视图:
SELECT DISTINCT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'Name of column';
答案 2 :(得分:2)
此查询将为您提供包含名为foo
的列的所有表SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'foo'
答案 3 :(得分:2)
请注意,虽然对于SQL * Server(以及mySQL和postGres)来说是正确的,但Oracle的答案是不同的,因为它们不支持信息模式(这是ANSI SQL-92,所以他们有足够的时间这样做。)
在Oracle上,您将使用
SELECT table_name, column_name
FROM ALL_TAB_COLUMNS
WHERE column_name = :column_name
或者你可以创建一个架构和视图来完成缺少的information_schema.columns的工作。
答案 4 :(得分:1)
select TABLE_NAME from Your_Database_Name.INFORMATION_SCHEMA.COLUMNS where COLUMN_NAME like '%ColumnName%' group by TABLE_NAME
答案 5 :(得分:1)
在sybase中;
declare @column varchar(30)
select @column = 'column_name'
select object_name(id), @column from DB_NAME..syscolumns where name = @column