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%''
Puede usar la tabla [INFORMATION_SCHEMA].[COLUMNS]
para encontrar columnas como
Select * From [INFORMATION_SCHEMA].[COLUMNS] Where COLUMN_NAME like ''%Column%''
Para obtener información de tablas y columnas para una declaración SQL dada, visite http://www.w3hattrick.com/2016/05/getting-table-and-column-information.html
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
Si te gustan más las herramientas de terceros, hay muchas opciones como:
Esto es muy útil si su base de datos contiene objetos cifrados (vistas, procedimientos, funciones) porque no puede buscarlos fácilmente utilizando tablas del sistema.
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