Encuentra todas las tablas que contienen la columna con el nombre especificado – MS SQL Server

¿Es posible buscar nombres de tablas que contengan columnas?

LIKE '%myName%' 

?

Tablas de búsqueda:

 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; 

Tablas de búsqueda y vistas:

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

También podemos usar la siguiente 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'); 
  • ¡¡SIMPLE COMO ESO!! (SQL, PL / SQL) Lo uso TODO el tiempo para encontrar TODAS las instancias de un nombre de columna en una base de datos dada (esquema).

Esto debería funcionar:

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

Si te gustan más las herramientas de terceros, hay muchas opciones allí, como:

  • Búsqueda ApexSQL
  • Paquete de herramientas SSMS
  • Herramientas de Red Gate .

Estos son muy útiles si su base de datos contiene objetos encriptados (vistas, procedimientos, funciones) porque no puede buscarlos fácilmente usando tablas del 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%' 

Esto aquí le dará un poco de información adicional sobre el esquema, las tablas y las columnas en las que puede optar o no por usar condiciones adicionales en su cláusula where para filtrar. Por ejemplo, si solo desea ver los campos que deben tener valores, agregue

 and c.is_nullable = 0 

Puede agregar otros condicionales, también agregué las columnas en la cláusula de selección de esta manera vertical, por lo que era fácil reordenar, eliminar, cambiar el nombre o agregar otros en función de sus necesidades. Alternativamente, puede buscar solo tablas usando T.Name. Es muy personalizable.

Disfrutar.

No sé por qué tantos de ustedes sugieren unirse a sys.table with sys.columns , simplemente pueden usar el siguiente código:

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

o

Si también quieres el nombre del esquema:

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

Si simplemente desea el nombre de la tabla, puede ejecutar:

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

Si también desea el Nombre de esquema (que en muchos casos lo hará, ya que tendrá muchos esquemas diferentes, y a menos que pueda recordar todas las tablas de la base de datos y su lugar, esto puede ser útil) ejecute:

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

y finalmente si lo quieres en un formato más agradable (aunque aquí es donde el código (en mi opinión) se está volviendo demasiado complicado para una escritura fácil):

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

tenga en cuenta que también puede crear una función basada en lo que tengo:

 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 la pena señalar que la función concat se agregó en 2012. Para 2008r2 y versiones anteriores use + para concatenar cadenas.

He reformateado el proceso un poco desde que publiqué esto. Ahora es un poco más avanzado, pero parece mucho más desordenado (pero está en un proceso, por lo que nunca lo verás) y está mejor formateado.

Esta versión te permite tenerla en una base de datos administrativa y luego buscar en cualquier base de datos. Cambie la declinación de @db de 'master' a la que desee que sea la base de datos predeterminada (NOTA: el uso de la función CONCAT () solo funcionará con 2012+ a menos que cambie la concatenación de cadenas para usar los 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; 

Es de Pinal Sir Blog

Puede encontrarlo desde INFORMATION_SCHEMA.COLUMNS por filtro de nombre de columna

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

La siguiente consulta le dará los nombres exactos de las tablas de la base de datos con el nombre del campo como ‘% myName’.

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

Para obtener información completa: nombre de la columna, nombre de la tabla y esquema de la tabla.

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

lo acabo de probar y esto funciona perfectamente

 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; 

Solo cambie YourDatbaseName a su base de datos y YourcolumnName a su nombre de columna que busca el rest, manténgalo como está.

Espero que esto haya ayudado

 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 

Lo usé para el mismo propósito y funcionó:

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

Esperemos que esta no sea una respuesta duplicada, pero lo que me gusta hacer es generar un enunciado sql dentro de una statement sql que me permita buscar los valores que estoy buscando (no solo las tablas con esos nombres de campo (como suele ser necesario para mí luego eliminar cualquier información relacionada con el id del nombre de la columna que estoy buscando):

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

Entonces puedo copiar y pegar ejecutar mi primera columna “SQLToRun” … luego reemplazo el “Seleccionar * desde” con “Eliminar desde” y me permite borrar cualquier referencia a ese ID dado. Escriba estos resultados en el archivo para que pueda tenerlos por si acaso.

NOTA **** Asegúrese de eliminar cualquier tabla de bakup antes de ejecutar su statement de eliminación …

  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 Oracle, puedes encontrar tablas y columnas con esto:

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

Para Oracle, con permisos de usuario normales:

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

Solo para mejorar las respuestas anteriores, también he incluido Vistas y Concatenado el Esquema y la Tabla / Vista juntos, haciendo que los Resultados sean más evidentes.

 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]; 

Puede usar la tabla [INFORMATION_SCHEMA].[COLUMNS] para buscar columnas como

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

Para obtener información sobre tablas y columnas para una statement SQL dada, visite http://www.w3hattrick.com/2016/05/getting-table-and-column-information.html

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

Aquí hay una solución de trabajo para una base de datos 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