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%'
?
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;
Também podemos usar a seguinte sintaxe: -
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');
- 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).
SELECT name
FROM sysobjects
WHERE id IN ( SELECT id
FROM syscolumns
WHERE name like '%column_name%' )
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.
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.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%'
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
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.
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%'
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 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%'
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%'
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.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
Usei isto 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 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%'
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 a oracle, você pode encontrar tabelas e colunas com isto:
select table_name, column_name
from user_tab_columns
where column_name
like '%myname%';
Para a Oracle, com permissões normais de utilizador:
select owner, table_name, column_name
from all_tab_columns
where column_name
like '%myname%';
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];
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
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%'
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