Encontre todas as tabelas contendo colunas com o nome especificado – MS SQL Server

É possível consultar nomes de tabelas que contenham colunas sendo

LIKE '%myName%' 

?

Pesquisar tabelas:

 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; 

Pesquisar tabelas e visualizações:

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

Nós também podemos usar a seguinte syntax:

 select * from INFORMATION_SCHEMA.COLUMNS where COLUMN_NAME like '%clientid%' order by TABLE_NAME 
 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'); 
  • SIMPLES ASSIM!! (SQL, PL / SQL) Eu uso o tempo todo para encontrar todas as instâncias de um nome de coluna em um determinado database (esquema).

Isso deve funcionar:

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

Se você está mais interessado em ferramentas de terceiros, existem muitas opções como:

  • Pesquisa ApexSQL
  • Pacote de ferramentas SSMS
  • Ferramentas de portão vermelho .

Estes são muito úteis se o seu database contiver objects criptografados (views, procedures, functions), porque você não pode facilmente procurar por estes usando tabelas do sistema.

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

Isso aqui lhe dará um pouco de informação extra sobre o esquema, tabelas e colunas que você pode ou não optar por usar condições extras em sua cláusula where para filtrar. Por exemplo, se você quiser ver apenas os campos que devem ter valores, adicione

 and c.is_nullable = 0 

Você poderia adicionar outras condicionais, eu também adicionei as colunas na cláusula select desta forma vertical, então foi fácil reordenar, remover, renomear ou adicionar outras com base em suas necessidades. Como alternativa, você pode pesquisar apenas tabelas usando T.Name. É muito personalizável.

Apreciar.

Eu não sei por que tantos de vocês sugerindo se juntar ao 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 você quiser também o nome do esquema:

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

Se você simplesmente quiser o nome da tabela, poderá executar:

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

Se você também quiser o Nome do Esquema (o que, em muitos casos, você fará, já que você terá muitos esquemas diferentes e, a menos que se lembre de todas as tabelas do database e de onde ele pertence, isso pode ser útil):

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

e, finalmente, se você quiser em um formato melhor (embora este seja o lugar onde o código (na minha opinião) está ficando muito complicado para facilitar a escrita):

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

note que você também pode criar uma function com base 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 o recurso concat foi adicionado em 2012. Para 2008r2 e anterior use + para concatenar strings.

Eu re-formatou o proc um pouco desde que eu postei isso. É um pouco mais avançado agora, mas parece muito mais confuso (mas está em um processo para que você nunca o veja) e está formatado melhor.

Esta versão permite que você a tenha em um database administrativo e, em seguida, pesquise em qualquer database. Altere a decleration de @db de 'master' para o que você deseja que o database padrão seja (OBSERVAÇÃO: o uso da function CONCAT () funcionará somente com 2012+, a menos que você altere a concatenação de strings 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 
 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; 

É de Pinal Sir Blog

Você pode encontrá-lo em INFORMATION_SCHEMA.COLUMNS pelo filtro column_name

 Select DISTINCT TABLE_NAME as TableName,COLUMN_NAME as ColumnName From INFORMATION_SCHEMA.COLUMNS Where column_name like '%myname%' 
 SELECT [TABLE_NAME] , [INFORMATION_SCHEMA].COLUMNS.COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME LIKE '%NAME%' ; 
 SELECT COLUMN_NAME, TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%myName%' 

A consulta a seguir fornecerá os nomes exatos da tabela do database com o nome do campo, como ‘% myName’.

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

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

Eu apenas tentei e isso 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 altere YourDatbaseName para seu database e YourcolumnName para o nome da coluna que você está procurando o resto mantê-lo como está.

Espero que isso tenha ajudado

 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 

Eu usei isso para o mesmo propósito e funcionou:

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

Espero que esta não seja uma resposta duplicada, mas o que eu gosto de fazer é gerar uma instrução sql dentro de uma instrução sql que me permitirá procurar os valores que estou procurando (não apenas as tabelas com esses nomes de campo necessário então excluir qualquer informação relacionada ao id do nome da coluna que estou procurando):

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

Então eu posso copiar e colar executar minha primeira coluna “SQLToRun” … então eu substituo o “Select * from” por “Delete from” e isso me permite apagar qualquer referência a esse ID! Grave esses resultados em um arquivo para que você tê-los apenas no caso.

NOTA **** Certifique-se de eliminar quaisquer tabelas de bakup antes de executar sua instrução de exclusã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%' 
 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; 

Como o oracle você pode encontrar tabelas e colunas com isso:

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

Para Oracle, com permissions de usuário normais:

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

Apenas para melhorar as respostas acima, eu incluí também Views e concatenei o Schema e o Table / View juntos, tornando os Results 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]; 

Você pode usar a tabela [INFORMATION_SCHEMA].[COLUMNS] para encontrar colunas como

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

Para obter informações de tabela e coluna para determinada instrução SQL, visite http://www.w3hattrick.com/2016/05/getting-table-and-column-information.html

Você 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%' 
 select table_name, column_name from user_tab_columns where column_name like '%myname%'; 

Funciona

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

Aqui está uma solução de trabalho para um database Sybase

 select t.table_name, c.column_name from systab as t key join systabcol as c where c.column_name = 'MyColumnName' 
 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