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




sql ne contient pas (23)

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

LIKE '%myName%'

?


J'ai utilisé cela dans le même but et cela a fonctionné:

  select * from INFORMATION_SCHEMA.COLUMNS
  where TABLE_CATALOG= 'theDatabase'
  and COLUMN_NAME like 'theCol%'

Je ne sais pas pourquoi tant d'entre vous suggérant de rejoindre 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%'

J'espère que ce n'est pas une réponse en double, mais ce que j'aime faire est de générer une instruction sql dans une instruction sql qui me permettra de rechercher les valeurs que je cherche (pas seulement les tables avec ces noms de champs nécessaire pour moi de supprimer ensuite toute information liée à l'identifiant du nom de la colonne que je cherche):

  SELECT  'Select * from ' + t.name + ' where ' + c.name + ' = 148' AS SQLToRun
  FROM sys.columns c, c.name as ColName, t.name as TableName
  JOIN sys.tables t 
     ON c.object_id = t.object_id
  WHERE c.name LIKE '%ProjectID%'

Ensuite, je peux copier et coller exécuter ma 1ère colonne "SQLToRun" ... puis je remplace le "Select * from" par "Delete from" et il me permet de supprimer toutes les références à cet ID donné! Ecrivez ces résultats dans le fichier de sorte que vous les avoir juste au cas où.

NOTE **** Assurez-vous d'éliminer toutes les tables de bakup avant d'exécuter votre instruction de suppression ...

  SELECT  'Delete from ' + t.name + ' where ' + c.name + ' = 148' AS SQLToRun
  FROM sys.columns c, c.name as ColName, t.name as TableName
  JOIN sys.tables t 
     ON c.object_id = t.object_id
  WHERE c.name LIKE '%ProjectID%'


SQL Server:

SELECT * 
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).


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 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.


declare @ColumnName nvarchar(max)='QbId'

Select b.Name as TableName from Sys.Columns a
Join Sys.Tables b
on a.Object_Id=b.Object_Id
where [email protected]

Pour obtenir des informations complètes: le nom de la colonne, le nom de la table ainsi que le schéma de la table.

SELECT COLUMN_NAME, TABLE_NAME, TABLE_SCHEMA
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME LIKE '%col_Name%'

DECLARE @columnName as varchar(100)
SET @columnName = 'ColumnName'

SELECT t.name AS Table, c.name AS Column,
ty.name AS Type, c.max_length AS Length
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
INNER JOIN sys.types ty ON c.system_type_id = ty.system_type_id
WHERE c.name LIKE @columnName
ORDER BY t.name, c.name

Comme Oracle, vous pouvez trouver des tables et des colonnes avec ceci:

select table_name, column_name
from user_tab_columns 
where column_name 
like '%myname%';

USE AdventureWorks

GO

SELECT t.name AS table_name, SCHEMA_NAME(schema_id) AS schema_name,
 c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%EmployeeID%'
ORDER BY schema_name, table_name; 

C'est de Pinal Sir Blog


SELECT t.name AS table_name, 
    SCHEMA_NAME(schema_id) AS schema_name,
    c.name AS column_name
FROM sys.tables AS t INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%Label%'
ORDER BY schema_name, table_name;

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. Changez la déclération de @db de 'master' à celle que vous voulez que la base de données par défaut soit (NOTE: l'utilisation de la fonction CONCAT () ne fonctionnera qu'avec 2012+ sauf si vous modifiez la concaténation de chaîne pour utiliser 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

Pour Oracle, avec les autorisations utilisateur normales:

select owner, table_name, column_name
from all_tab_columns 
where column_name 
like '%myname%';

SELECT col.Name AS ColumnName, tab.Name AS TableName 
FROM sys.columns col  
     JOIN sys.tables tab   
ON col.Object_id = tab.Object_id   
WHERE col.Name LIKE '%MyName%'

je viens de l'essayer et cela fonctionne parfaitement

USE YourDatabseName
GO
SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%YourColumnName%'
ORDER BY schema_name, table_name;

Changez seulement YourDatbaseName à votre base de données et YourcolumnName à votre nom de colonne que vous recherchez pour le reste le garde comme il est.

J'espère que cela a aidé


SELECT COLUMN_NAME, TABLE_NAME
  FROM INFORMATION_SCHEMA.COLUMNS    
 WHERE COLUMN_NAME LIKE '%myName%'

La requête suivante vous donnera les noms exacts de la base de données ayant le nom du champ comme '% myName'.

SELECT distinct(TABLE_NAME)
  FROM INFORMATION_SCHEMA.COLUMNS    
 WHERE COLUMN_NAME LIKE '%myName%'

select table_name, column_name
from user_tab_columns where column_name like '%myname%';

Ça marche


Vous pouvez le trouver à partir de INFORMATION_SCHEMA.COLUMNS par le filtre column_name

Select DISTINCT TABLE_NAME as TableName,COLUMN_NAME as ColumnName
     From INFORMATION_SCHEMA.COLUMNS Where column_name like '%myname%'

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;

Nous pouvons également utiliser la syntaxe suivante: -

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




system-tables