2010-08-31 5 views
2

Je suis en attente de trouver une requête SQL ou T-SQL pour obtenir les noms de toutes les tables d'une base de données/schéma qui ont une colonne de prénom.Recherche d'une colonne nommée présente dans une table

Quelqu'un peut-il m'aider s'il vous plaît?

Merci à l'avance :)

+0

Si cette question être taggés que SQL Server (comme la réponse varie en fonction de la base de données) – JulesLt

+1

@JulesLt: 'INFORMATION_SCHEMA' est au moins un peu standard. Par exemple, voici MySql: http://dev.mysql.com/doc/refman/5.0/en/columns-table.html. –

+1

C'est ANSI 92, mais pas pris en charge sur l'exception évidente de Larry! – JulesLt

Répondre

4

vous pouvez utiliser la vue du système INFORMATION_SCHEMA.COLUMNS:

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

Fonctionne même pour MSSQL 2000. –

5

Ce trouvera les colonnes que vous êtes après dans la base de données en cours/actif. Si vous êtes dans une autre base de données, préfixe juste INFORMATION_SCHEMA.COLUMNS avec le nom de base de données (par exemple 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 
    ) 

Cela fonctionne dans SQL Server et devrait fonctionner dans d'autres SGBD est trop depuis INFORMATION_SCHEMA est quelque peu normalisée (par exemple ici, il est dans MySql: http://dev.mysql.com/doc/refman/5.0/en/columns-table.html)

2

Cette requête vous donnera toutes les tables avec une colonne nommée 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

Soyez conscient que tout correct pour SQL * Server (et mySQL - et Postgres) la réponse est différente pour Oracle, car ils ne prennent pas en charge le schéma de l'information (qui est ANSI SQL- 92, donc ils ont eu beaucoup de temps pour le faire).

Sur Oracle vous utilisez

SELECT table_name, column_name 
FROM ALL_TAB_COLUMNS 
WHERE column_name = :column_name 

Ou vous pouvez créer un schéma et voir pour faire le travail des INFORMATION_SCHEMA.COLUMNS manquantes.

+2

Trouvé un projet open source pour ajouter le support manquant: http://sourceforge.net/projects/ora-info-schema/ – JulesLt

1

dans sybase;

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

Merci Burçin Yazıcı :) –

Questions connexes