Question Trouver toutes les tables contenant une colonne avec le nom spécifié - MS SQL Server


Est-il possible d'interroger les noms de tables contenant des colonnes

LIKE '%myName%'

?


854
2018-01-31 10:12


origine


Réponses:


Rechercher des tables:

SELECT      c.name  AS 'ColumnName'
            ,t.name AS 'TableName'
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       c.name LIKE '%MyName%'
ORDER BY    TableName
            ,ColumnName;

Rechercher des tableaux et des vues:

SELECT      COLUMN_NAME AS 'ColumnName'
            ,TABLE_NAME AS  'TableName'
FROM        INFORMATION_SCHEMA.COLUMNS
WHERE       COLUMN_NAME LIKE '%MyName%'
ORDER BY    TableName
            ,ColumnName;

1382
2018-01-31 10:17



Nous pouvons également utiliser la syntaxe suivante: -

select * from INFORMATION_SCHEMA.COLUMNS 
where COLUMN_NAME like '%clientid%' 
order by TABLE_NAME

221
2017-10-18 12:45



SQL Server:

SELECT Table_Name, Column_Name 
FROM  INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'YOUR_DATABASE'
AND   COLUMN_NAME LIKE '%YOUR_COLUMN%'

Oracle:

SELECT owner,table_name, column_name 
FROM all_tab_columns 
WHERE column_name like '%YOUR_COLUMN_NAME%'
AND OWNER in ('YOUR_SCHEMA_NAME');
  • AUSSI SIMPLE QUE CELA!! (SQL, PL / SQL) Je l'utilise TOUJOURS pour trouver TOUTES les instances d'un nom de colonne dans une base de données donnée (schéma).

69
2017-09-22 18:56



Si vous êtes plus dans des outils tiers, il y a beaucoup d'options comme:

Ceux-ci sont très utiles si votre base de données contient des objets cryptés (vues, procédures, fonctions) car vous ne pouvez pas facilement les rechercher à l'aide des tables système.


57
2018-04-14 01:06



Cela devrait fonctionner:

SELECT name 
FROM sysobjects 
WHERE id IN ( SELECT id 
              FROM syscolumns 
              WHERE name like '%column_name%' )

56
2018-01-31 10:17



select  
        s.[name]            'Schema',
        t.[name]            'Table',
        c.[name]            'Column',
        d.[name]            'Data Type',
        d.[max_length]      'Max Length',
        d.[precision]       'Precision',
        c.[is_identity]     'Is Id',
        c.[is_nullable]     'Is Nullable',
        c.[is_computed]     'Is Computed',
        d.[is_user_defined] 'Is UserDefined',
        t.[modify_date]     'Date Modified',
        t.[create_date]     'Date created'
from        sys.schemas s
inner join  sys.tables  t
on s.schema_id = t.schema_id
inner join  sys.columns c
on t.object_id = c.object_id
inner join  sys.types   d
on c.user_type_id = d.user_type_id
where c.name like '%ColumnName%'

Cela vous donnera ici un peu plus d'informations sur le schéma, les tables et les colonnes que vous pouvez ou non choisir d'utiliser des conditions supplémentaires dans votre clause where pour filtrer. Par exemple, si vous voulez seulement voir les champs qui doivent avoir des valeurs ajouter

and c.is_nullable = 0

Vous pouvez ajouter d'autres conditions, j'ai également ajouté les colonnes dans la clause select de cette manière verticale, il était donc facile de réorganiser, supprimer, renommer ou ajouter d'autres en fonction de vos besoins. Alternativement, vous pouvez rechercher uniquement des tables en utilisant T.Name. C'est très personnalisable.

Prendre plaisir.


45
2018-03-27 13:42



Je ne sais pas pourquoi tant d'entre vous suggèrent de se joindre à sys.table with sys.columns vous pouvez simplement utiliser le code ci-dessous:

Select object_name(object_id) as TableName,* from SYS.columns where name LIKE '%MyName%'

ou

Si vous voulez également un nom de schéma:

Select * from  INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME LIKE '%MyName%'

37
2017-08-19 14:24



Si vous voulez simplement le nom de la table, vous pouvez l'exécuter:

select object_name(object_id) from sys.columns
where name like '%received_at%'

Si vous voulez aussi le nom du schéma (ce qui dans beaucoup de cas, vous aurez beaucoup de schémas différents, et à moins que vous ne puissiez vous souvenir de chaque table de la base de données et de son appartenance, cela peut être utile)

select OBJECT_SCHEMA_NAME(object_id),object_name(object_id) from sys.columns
where name like '%received_at%'

et enfin si vous le voulez dans un format plus agréable (même si c'est là que le code (à mon avis) devient trop compliqué pour une écriture facile):

select concat(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) from sys.columns
where name like '%received_at%'

Notez que vous pouvez également créer une fonction basée sur ce que j'ai:

CREATE PROCEDURE usp_tablecheck
--Scan through all tables to identify all tables with columns that have the provided string
--Stephen B
@name nvarchar(200)
AS
SELECT CONCAT(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) AS [Table Name], name AS [Column] FROM sys.columns
WHERE name LIKE CONCAT('%',@name,'%')
ORDER BY [Table Name] ASC, [Column] ASC
GO

Il convient de noter que la fonctionnalité de concatation a été ajoutée en 2012. Pour 2008r2 et les versions antérieures, utilisez + pour concaténer les chaînes.

J'ai reformaté la proc depuis que j'ai posté ceci. C'est un peu plus avancé maintenant mais il a l'air beaucoup plus désordonné (mais c'est dans un proc si vous ne le verrez jamais) et il est mieux formaté.

Cette version vous permet de l'avoir dans une base de données administrative, puis de chercher dans n'importe quelle base de données. Changer la décleration de @db de 'master' REMARQUE: l'utilisation de la fonction CONCAT () ne fonctionnera qu'avec 2012+, sauf si vous modifiez la concaténation de chaîne pour utiliser le + les opérateurs).

CREATE PROCEDURE [dbo].[usp_tablecheck]
    --Scan through all tables to identify all tables in the specified database with columns that have the provided string
    --Stephen B
    @name nvarchar(200)
    ,@db nvarchar(200) = 'master'
AS
    DECLARE @sql nvarchar(4000) = CONCAT('
        SELECT concat(OBJECT_SCHEMA_NAME(col.object_id,DB_ID(''',@db,''')),''.'',object_name(col.object_id,DB_ID(''',@db,'''))) AS [Table Name]
            ,col.name AS [Column] 
        FROM ',@db,'.sys.columns col
        LEFT JOIN ',@db,'.sys.objects ob 
            ON ob.object_id = col.object_id
        WHERE 
            col.name LIKE CONCAT(''%'',''',@name,''',''%'') 
            AND ob.type =''U''
        ORDER BY [Table Name] ASC
            ,[Column] ASC')
    EXECUTE (@sql)
GO

35
2017-08-27 08:05