Procurar todas as tabelas que contêm a coluna com o nome indicado - servidor SQL

é possível pesquisar por nomes de tabelas que contenham colunas sendo

LIKE '%myName%'

?

Author: Rand Random, 2011-01-31

29 answers

Tabelas De Pesquisa:

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;

& Áreas Das Tabelas De Pesquisa:

SELECT      COLUMN_NAME AS 'ColumnName'
            ,TABLE_NAME AS  'TableName'
FROM        INFORMATION_SCHEMA.COLUMNS
WHERE       COLUMN_NAME LIKE '%MyName%'
ORDER BY    TableName
            ,ColumnName;
 1430
Author: AdaTheDev, 2016-12-20 21:53:21

Também podemos usar a seguinte sintaxe: -

select * from INFORMATION_SCHEMA.COLUMNS 
where COLUMN_NAME like '%clientid%' 
order by TABLE_NAME
 234
Author: Khwaza Bandenawaz, 2014-10-02 06:08:23
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');
    TÃO SIMPLES QUANTO ISSO!! (SQL, PL / SQL) Eu uso-o o tempo todo para encontrar todas as instâncias de um nome de coluna em um dado banco de dados (schema).
 83
Author: Todd ECU, 2018-09-25 14:59:05
Isto deve funcionar.
SELECT name 
FROM sysobjects 
WHERE id IN ( SELECT id 
              FROM syscolumns 
              WHERE name like '%column_name%' )
 60
Author: cichy, 2014-10-02 06:07:17
Se você está mais interessado em ferramentas de terceiros, há muitas opções lá, tais como:

Estes são muito úteis se a sua base de dados contém objectos encriptados (vistas, procedimentos, funções) porque não pode procurar facilmente por estes através de tabelas do sistema.

 59
Author: Dwoolk, 2016-11-16 20:40:06
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%'

Isto aqui dar-lhe-á uma pequena informação extra sobre o esquema, tabelas e colunas que poderá ou não optar por usar Condições extras na sua cláusula onde para filtrar. Por exemplo, se você só queria ver os campos que devem ter valores adicione

and c.is_nullable = 0

Você poderia adicionar outros condicionalismos, eu também adicionei as colunas na cláusula de seleção desta forma vertical para que fosse fácil reordenar, remover, mudar o nome ou adicionar outros com base nas suas necessidades. Alternadamente você poderia procurar apenas tabelas usando T.Name é muito personalizável.

Diverte-te.
 46
Author: Francis Rodgers, 2013-03-27 13:42:53
Não sei porque é que tantos de vocês sugeriram juntar-se a sys.table with sys.columns você pode simplesmente usar o código abaixo:

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

Ou

Se também quiser o nome do esquema:

Select * from  INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME LIKE '%MyName%'
 39
Author: user3583912, 2015-02-25 00:19:22

Se apenas quiser o nome da tabela, pode correr:

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

Se você quer o nome do esquema também (que em muitos casos você vai, como você vai ter um monte de esquemas diferentes, e a menos que você pode se lembrar de cada tabela na base de dados e onde ela pertence, isso pode ser útil) executar:

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

E finalmente se o quiser num formato melhor (embora seja aqui que o código (na minha opinião) está a ficar demasiado complicado para escrita fácil):

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

Note que também pode criar um função baseada no que eu tenho:

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
Vale a pena notar que a característica concat foi adicionada em 2012. For 2008r2 and earlier use + to concatenate strings. Reformulei um pouco o proc desde que publiquei isto. É um pouco mais avançado agora, mas parece muito mais messier (mas está em um proc para que você nunca vai vê-lo) e é formatado melhor.

Esta versão permite-lhe tê-la numa base de dados administrativa e, em seguida, procurar em qualquer base de dados. Alterar a declinação de @db de 'master' para o que quiser que a base de dados predefinida seja (nota: a utilização da função CONCAT() só irá funcionar com 2012+ a menos que mude a combinação de texto para usar os operadores +).

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
 36
Author: Ste Bov, 2017-08-08 06:14:46
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; 
É do blog Pinal Sir.
 24
Author: shadab shah, 2012-07-06 09:13:14

Você pode encontrá-lo a partir de INFORMATION_SCHEMA.Colunas por filtro column_ Nome

Select DISTINCT TABLE_NAME as TableName,COLUMN_NAME as ColumnName
     From INFORMATION_SCHEMA.COLUMNS Where column_name like '%myname%'
 21
Author: Munavvar, 2016-11-30 08:43:58
SELECT  [TABLE_NAME] ,
        [INFORMATION_SCHEMA].COLUMNS.COLUMN_NAME
FROM    INFORMATION_SCHEMA.COLUMNS
WHERE   INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME LIKE '%NAME%' ;
 20
Author: Ritesh Varma-MCA, 2013-11-18 09:04:48
SELECT COLUMN_NAME, TABLE_NAME
  FROM INFORMATION_SCHEMA.COLUMNS    
 WHERE COLUMN_NAME LIKE '%myName%'
 18
Author: Neil Knight, 2011-01-31 10:19:18

A seguir à consulta dar-lhe-á os nomes exactos da tabela da base de dados com o nome do campo como '%myName'.

SELECT distinct(TABLE_NAME)
  FROM INFORMATION_SCHEMA.COLUMNS    
 WHERE COLUMN_NAME LIKE '%myName%'
 15
Author: Shaikh Farooque, 2013-01-21 13:20:09

Para obter informações completas: nome da coluna, Nome da tabela e esquema da tabela..

SELECT COLUMN_NAME, TABLE_NAME, TABLE_SCHEMA
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME LIKE '%col_Name%'
 14
Author: Kaleab, 2016-08-01 14:54:21
Acabei de tentar e isto funciona perfeitamente.
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;

Apenas mude o seu nome de Base de dados para a sua base de dados e o seu nome de código para o seu nome de coluna que está à procura do resto mantenha-o como está.

Espero que isto tenha ajudado.
 12
Author: Alz, 2014-07-10 05:54:05
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
 8
Author: Mauro Bilotti, 2014-03-14 14:21:06

Usei isto para o mesmo propósito e funcionou:

  select * from INFORMATION_SCHEMA.COLUMNS
  where TABLE_CATALOG= 'theDatabase'
  and COLUMN_NAME like 'theCol%'
 7
Author: Rainhider, 2015-06-23 14:17:14

Espero que esta não seja uma resposta duplicada, mas o que eu gosto de fazer é gerar uma declaração sql dentro de uma declaração sql que me permitirá procurar pelos valores que estou à procura (não apenas as tabelas com esses nomes de campos ( como normalmente é necessário para mim para então apagar qualquer informação relacionada com o id do nome da coluna que estou à procura):

  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%'

Depois posso copiar e colar a minha primeira coluna "SQLToRun"... depois substituo o "Select * from' por 'Delete from' e permite-me apaga todas as referências a esse ID indicado! Escreva estes resultados para arquivo para que você os tenha apenas no caso.

Nota: * * * * certifique-se que elimina todas as tabelas de bakup antes de executar a sua declaração de eliminação...
  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%'
 6
Author: Dan B, 2014-06-26 21:51:01
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;
 5
Author: PedroSouki, 2015-08-13 13:51:30

Como a oracle, você pode encontrar tabelas e colunas com isto:

select table_name, column_name
from user_tab_columns 
where column_name 
like '%myname%';
 5
Author: Iceknight, 2015-11-03 13:33:59

Para a Oracle, com permissões normais de utilizador:

select owner, table_name, column_name
from all_tab_columns 
where column_name 
like '%myname%';
 4
Author: edson-, 2017-02-09 21:43:25
{[[2]} só para melhorar as respostas acima incluí também pontos de vista e Concatenei o esquema e a tabela/Vista em conjunto, tornando os resultados mais aparentes.
DECLARE @COLUMNNAME AS VARCHAR(100);

SET @COLUMNNAME = '%Absence%';

SELECT CASE
           WHEN [T].[NAME] IS NULL
           THEN 'View'
           WHEN [T].[NAME] = ''
           THEN 'View'
           ELSE 'Table'
       END AS [TYPE], '[' + [S].[NAME] + '].' + '[' + CASE
                                                          WHEN [T].[NAME] IS NULL
                                                          THEN [V].[NAME]
                                                          WHEN [T].[NAME] = ''
                                                          THEN [V].[NAME]
                                                          ELSE [T].[NAME]
                                                      END + ']' AS [TABLE], [C].[NAME] AS [COLUMN]
FROM [SYS].[SCHEMAS] AS [S] LEFT JOIN [SYS].[TABLES] AS [T] ON [S].SCHEMA_ID = [T].SCHEMA_ID
                            LEFT JOIN [SYS].[VIEWS] AS [V] ON [S].SCHEMA_ID = [V].SCHEMA_ID
                            INNER JOIN [SYS].[COLUMNS] AS [C] ON [T].OBJECT_ID = [C].OBJECT_ID
                                                                 OR
                                                                 [V].OBJECT_ID = [C].OBJECT_ID
                            INNER JOIN [SYS].[TYPES] AS [TY] ON [C].[SYSTEM_TYPE_ID] = [TY].[SYSTEM_TYPE_ID]
WHERE [C].[NAME] LIKE @COLUMNNAME
GROUP BY '[' + [S].[NAME] + '].' + '[' + CASE
                                             WHEN [T].[NAME] IS NULL
                                             THEN [V].[NAME]
                                             WHEN [T].[NAME] = ''
                                             THEN [V].[NAME]
                                             ELSE [T].[NAME]
                                         END + ']', [T].[NAME], [C].[NAME], [S].[NAME]
ORDER BY '[' + [S].[NAME] + '].' + '[' + CASE
                                             WHEN [T].[NAME] IS NULL
                                             THEN [V].[NAME]
                                             WHEN [T].[NAME] = ''
                                             THEN [V].[NAME]
                                             ELSE [T].[NAME]
                                         END + ']', CASE
                                                        WHEN [T].[NAME] IS NULL
                                                        THEN 'View'
                                                        WHEN [T].[NAME] = ''
                                                        THEN 'View'
                                                        ELSE 'Table'
                                                    END, [T].[NAME], [C].[NAME];
 3
Author: Stephen Brett, 2015-08-04 10:47:23

Pode usar a tabela [INFORMATION_SCHEMA].[COLUMNS] para encontrar colunas Como tal

Select * From [INFORMATION_SCHEMA].[COLUMNS] Where COLUMN_NAME like '%Column%'

Para obter a informação da tabela e coluna para a visita de declaração SQL indicada http://www.w3hattrick.com/2016/05/getting-table-and-column-information.html

 3
Author: pooranendu patel, 2016-05-22 11:24:57

Pode tentar esta consulta:

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 '%myName%'
 3
Author: soheila sadeghian, 2017-01-14 13:19:01
select table_name, column_name
from user_tab_columns where column_name like '%myname%';

Funciona

 2
Author: Pablo Glez, 2015-10-07 18:02:23
Create table #yourcolumndetails(
DBaseName varchar(100), 
TableSchema varchar(50), 
TableName varchar(100),
ColumnName varchar(100), 
DataType varchar(100), 
CharMaxLength varchar(100))

EXEC sp_MSForEachDB @command1='USE [?];
    INSERT INTO #yourcolumndetails SELECT
    Table_Catalog
    ,Table_Schema
    ,Table_Name
    ,Column_Name
    ,Data_Type
    ,Character_Maximum_Length
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME like ''origin'''

select * from #yourcolumndetails
Drop table #yourcolumndetails
 2
Author: Joby, 2016-06-29 12:03:18
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%'
 2
Author: Novice, 2016-10-21 04:16:42
Aqui está uma solução de trabalho para uma base de dados Sybase
select 
  t.table_name, 
  c.column_name 
from 
  systab as t key join systabcol as c 
where 
   c.column_name = 'MyColumnName'
 0
Author: Janey, 2018-07-04 15:01:47
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 a.Name=@ColumnName
 -2
Author: UJS, 2016-11-22 12:49:19