una todas tipos texto tablas tabla subconsultas las ejemplos datos consultas columna coincidencias buscar bases sql sql-server tsql system-tables

todas - subconsultas sql



Encuentre todas las tablas que contienen la columna con el nombre especificado-MS SQL Server (29)

¿Es posible consultar nombres de tablas que contienen columnas que están siendo

LIKE ''%myName%''

?


Acabo de probarlo 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;

Solamente cambie YourDatbaseName a su base de datos y YourcolumnName a su nombre de columna que está buscando, el resto lo mantiene tal como está.

Espero que esto haya ayudado


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


Como oracle puedes encontrar tablas y columnas con esto:

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


Esperemos que esto no sea una respuesta duplicada, pero lo que me gusta es generar una instrucción SQL dentro de una instrucción SQL que me permita buscar los valores que busco (no solo las tablas con esos nombres de campo (como suele ser) necesario para 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%''

Luego puedo copiar y pegar, ejecutar mi primera columna "SQLToRun" ... luego reemplazar "Seleccionar * de" con "Eliminar de" y me permite eliminar cualquier referencia a esa ID. 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 declaración 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%''


Esto debería funcionar:

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


La siguiente consulta le dará los nombres de tabla exactos de la base de datos que tiene un nombre de campo como ''% myName''.

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


No sé por qué tantos de ustedes que 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%''


Para Oracle, con permisos de usuario normales:

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


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

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


Puede encontrarlo en INFORMATION_SCHEMA.COLUMNS por column_name filter

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



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


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 del 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 a dónde pertenece, 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 desea en un formato más agradable (aunque aquí es donde el código (en mi opinión) se está complicando demasiado para escribirlo fácilmente):

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 anteriores use + para concatenar cadenas.

He re-formateado el proceso un poco desde que publiqué esto. Ahora es un poco más avanzado, pero se ve mucho más desordenado (pero está en un proceso para que nunca lo veas) y tiene un formato mejor.

Esta versión le permite tenerla en una base de datos administrativa y luego buscar en cualquier base de datos. Cambie la separación de @db de ''master'' a la que quiera 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



Solo para mejorar las respuestas anteriores, también he incluido Vistas y Concatenado el Esquema y la Tabla / Vista para hacer más aparentes los Resultados.

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


También podemos utilizar la siguiente sintaxis:

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


Utilicé esto para el mismo propósito y funcionó:

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


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;

Buscar Tablas y Vistas:

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


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


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


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


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


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 determinada (esquema).

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.


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


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á una pequeña información adicional sobre el esquema, las tablas y las columnas que puede o no elegir 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

Podría agregar otros condicionales, también agregué las columnas en la cláusula de selección de esta manera vertical, de modo que fue fácil reordenar, eliminar, renombrar o agregar otros según sus necesidades. Alternativamente, puede buscar solo tablas utilizando T.Name. Es muy personalizable.

Disfrutar.


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

Funciona