Búsqueda de nombres de tablas

99

Utilizo lo siguiente para buscar cadenas en mis procedimientos almacenados:

use DBname
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%xxx%'

¿Es fácil modificar lo anterior para que busque nombres de tablas en una base de datos específica "DBname"?

por qué
fuente

Respuestas:

143

Estoy usando esto y funciona bien

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%%'
NeshaSerbia
fuente
3
Incluye vistas también :-)
François Breton
87
select name
  from DBname.sys.tables
 where name like '%xxx%'
   and is_ms_shipped = 0; -- << comment out if you really want to see them
RichardTheKiwi
fuente
comentar la línea and is_ms_shipped = 0;no parece hacer mucho
whytheq
2
Lo único que normalmente oculta son las tablas de soporte del diagrama de la base de datos, o solo hay una. Es más útil cuando se buscan funciones / procedimientos.
RichardTheKiwi
¿Por qué no agregar nombres de esquema? seleccione t.schema_id, s.name, t.Name de DBNAME.sys.tables como t combinación interna DBNAME.sys.schemas como s en t.schema_id = s.schema_id donde t.name como '% yourtabletosearch%' y is_ms_shipped = 0
Acroneos
10

Si desea buscar en todas las tablas en todas las bases de datos de todo el servidor y obtener resultados, puede hacer uso del procedimiento sp_MSforeachdb no documentado :

sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%Table_Names%'''
rescates
fuente
3
Esta respuesta es la única útil si no sabe en qué base de datos podría estar una tabla
Mateo
7

Supongo que desea pasar el nombre de la base de datos como parámetro y no solo ejecutar:

SELECT  *
FROM    DBName.sys.tables
WHERE   Name LIKE '%XXX%'

Si es así, puede usar SQL dinámico para agregar el nombre de la base de datos a la consulta:

DECLARE @DBName NVARCHAR(200) = 'YourDBName',
        @TableName NVARCHAR(200) = 'SomeString';

IF NOT EXISTS (SELECT 1 FROM master.sys.databases WHERE Name = @DBName)
    BEGIN
        PRINT 'DATABASE NOT FOUND';
        RETURN;
    END;

DECLARE @SQL NVARCHAR(MAX) = '  SELECT  Name
                                FROM    ' + QUOTENAME(@DBName) + '.sys.tables
                                WHERE   Name LIKE ''%'' + @Table + ''%''';

EXECUTE SP_EXECUTESQL @SQL, N'@Table NVARCHAR(200)', @TableName;
GarethD
fuente
5

También puede utilizar el botón Filtro para filtrar tablas con una determinada cadena. Puede hacer lo mismo con los procedimientos almacenados y las vistas.

ingrese la descripción de la imagen aquí

vive el amor
fuente
4

Agregando a la respuesta de @ [RichardTheKiwi].

Siempre que busco una lista de tablas, en general quiero seleccionar entre todas ellas o eliminarlas. A continuación se muestra un script que genera esos scripts para usted.

El script de selección generado también agrega una columna tableName para que sepa qué tabla está viendo:

select 'select ''' + name + ''' as TableName, * from ' + name as SelectTable,
'delete from ' + name as DeleteTable
from sys.tables
where name like '%xxxx%'
and is_ms_shipped = 0; 
Rafi
fuente
3

también puede utilizar el comando show.

show tables like '%tableName%'
Naseeruddin VN
fuente
6
Esta es la sintaxis de MySQL en una pregunta etiquetada como sql-server
Mike Guthrie
3

Sé que este es un hilo antiguo, pero si prefiere una búsqueda que no distingue entre mayúsculas y minúsculas:

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE Lower(TABLE_NAME) LIKE Lower('%%')
Tim Stack
fuente
2

Quiero publicar una solución simple para cada esquema que tenga. Si está utilizando MySQL DB, simplemente puede obtener de su esquema todo el nombre de la tabla y agregar la condición WHERE-LIKE. También puede hacerlo con la línea de comando habitual de la siguiente manera:

SHOW TABLES WHERE tables_in_<your_shcema_name> LIKE '%<table_partial_name>%';

donde tables_in_<your_shcema_name>devuelve el nombre del SHOW TABLEScomando de la columna .

Marcello Marino
fuente