2010-08-31 40 views
2

我瘋狂地找到SQL或T-SQL查詢來獲取具有給定名稱列的數據庫/架構中所有表的名稱。查找表中存在的命名列

任何人都可以幫助我嗎?

在此先感謝:)

+0

此問題僅被標記爲SQL Server(因爲答案因數據庫而異) – JulesLt 2010-08-31 11:15:04

+1

@JulesLt:「INFORMATION_SCHEMA」至少有點標準。例如,這裏是在MySql中:http://dev.mysql.com/doc/refman/5.0/en/columns-table.html。 – 2010-08-31 11:18:57

+1

這是ANSI 92,但拉里的明顯例外不支持! – JulesLt 2010-08-31 11:20:40

回答

4

可以使用INFORMATION_SCHEMA.COLUMNS系統視圖:

SELECT DISTINCT TABLE_NAME, COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME = 'Name of column'; 
+0

即使對於MSSQL 2000也適用。 – 2017-06-27 14:14:10

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

2

該查詢會給你一個名爲foo的列中的所有表

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME = 'foo' 
1

select TABLE_NAME from Your_Database_Name.INFORMATION_SCHEMA.COLUMNS where COLUMN_NAME like '%ColumnName%' group by TABLE_NAME

2

要知道,儘管正確的SQL *服務器(和MySQL - 和Postgres)的答案是Oracle不同,因爲它們不支持的信息模式(這是ANSI SQL- 92,所以他們有足夠的時間這樣做)。

在Oracle上你會用

SELECT table_name, column_name 
FROM ALL_TAB_COLUMNS 
WHERE column_name = :column_name 

或者你可以創建一個模式,並查看做失蹤INFORMATION_SCHEMA.COLUMNS的工作。

+2

找到一個開源項目來添加缺少的支持: http://sourceforge.net/projects/ora-info-schema/ – JulesLt 2010-08-31 11:23:21

1

in sybase;

declare @column varchar(30) 
select @column = 'column_name' 
select object_name(id), @column from DB_NAME..syscolumns where name = @column 
+0

感謝BurçinYazıcı:) – 2010-08-31 12:43:41