¿Es posible consultar los nombres de tablas que contienen columnas siendo
LIKE '%myName%'
?
¿Es posible consultar los nombres de tablas que contienen columnas siendo
LIKE '%myName%'
?
Respuestas:
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;
INFORMATION_SCHEMA
vistas @Revious incluidas en SQL Server cumplen con la definición estándar ISO para el INFORMATION_SCHEMA. , sys.columns
, sys.tables
Que es específico de Microsoft SQL Server.
TABLE_SCHEMA
en su lista de selección puede ser útil. Todavía +1 porque es una buena respuesta.
También podemos usar la siguiente sintaxis: -
select * from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME like '%clientid%'
order by TABLE_NAME
INFORMATION_SCHEMA
es parte del Estándar ANSI
Servidor SQL:
SELECT Table_Name, Column_Name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'YOUR_DATABASE'
AND COLUMN_NAME LIKE '%YOUR_COLUMN%'
Oráculo:
SELECT owner, table_name, column_name
FROM all_tab_columns
WHERE column_name LIKE '%YOUR_COLUMN_NAME%'
AND OWNER IN ('YOUR_SCHEMA_NAME');
select
s.[name] 'Schema',
t.[name] 'Table',
c.[name] 'Column',
d.[name] 'Data Type',
c.[max_length] 'Length',
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 que puede elegir o no 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 select de esta manera vertical, por lo que fue fácil reordenar, eliminar, renombrar o agregar otros según sus necesidades. Alternativamente, puede buscar solo tablas usando T.Name. Es muy personalizable.
Disfrutar.
Si le gustan más las herramientas de terceros, hay muchas opciones, como:
Estos son muy útiles si su base de datos contiene objetos cifrados (vistas, procedimientos, funciones) porque no puede buscarlos fácilmente usando tablas del sistema.
No sé por qué tantos de ustedes sugiriendo unirse a sys.table with sys.columns
ustedes 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 del esquema (que en muchos casos lo hará, ya que tendrá muchos esquemas diferentes, y a menos que pueda recordar cada tabla 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 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 formateado 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á formateado mejor.
Esta versión le permite tenerla en una base de datos administrativa y luego buscar en cualquier base de datos. Cambie la declinación de @db
from 'master'
a la que desee que sea la base de datos predeterminada (NOTA: usar 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 del Blog de Pinal Sir
SELECT COLUMN_NAME, TABLE_NAME
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%' ;
La siguiente consulta le dará los nombres exactos de la tabla 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%'
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 está buscando, el resto lo mantiene 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
Espero que esta no sea una respuesta duplicada, pero lo que me gusta hacer es generar una declaración sql dentro de una declaración sql que me permita buscar los valores que estoy buscando (no solo las tablas con esos nombres de campo (como suele ser necesario para que luego elimine cualquier información relacionada con la identificación 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 reemplazo "Seleccionar * de 'con' Eliminar de 'y me permite eliminar cualquier referencia a esa ID dada. ¡Escriba estos resultados en el archivo para que pueda tenerlos por si acaso.
NOTA **** Asegúrese de eliminar las tablas 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%'
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;
Al igual que Oracle, puede encontrar tablas y columnas con esto:
select table_name, column_name
from user_tab_columns
where column_name
like '%myname%';
Quería algo para mesas y vistas que no me hiciera sangrar los ojos.
Consulta
SELECT
t.TABLE_TYPE AS [Type],
c.TABLE_NAME AS [Object],
c.COLUMN_NAME AS [Column]
FROM
INFORMATION_SCHEMA.COLUMNS AS c
LEFT JOIN INFORMATION_SCHEMA.TABLES AS t ON
t.TABLE_CATALOG = c.TABLE_CATALOG AND
t.TABLE_SCHEMA = c.TABLE_SCHEMA AND
t.TABLE_NAME = c.TABLE_NAME
WHERE
c.COLUMN_NAME LIKE '%myName%'
ORDER BY
[Type],
[Object],
[Column]
Resultado
Type Object Column
----------------------------
BASE TABLE Table1 myName1
BASE TABLE Table2 myName2
VIEW View1 myName1
VIEW View2 myName2
Solo para mejorar las respuestas anteriores, también he incluido Vistas y Concatenado el Esquema y la Tabla / Vista juntos para hacer 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];
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%'
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
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'
Podemos usar sp_columns
para el propósito.
sp_columns 'table name', null, null, '%column name%'