Pesquisa de nomes de mesa

97

Eu uso o seguinte para pesquisar strings em meus procedimentos armazenados:

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

É fácil alterar o acima para que ele pesquise nomes de tabelas em um banco de dados "DBname" específico?

porque theq
fonte

Respostas:

140

Estou usando isso e funciona bem

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%%'
NeshaSerbia
fonte
3
Inclui vistas também :-)
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
fonte
comentar a linha and is_ms_shipped = 0;não parece fazer muito
whytheq
2
A única coisa que normalmente oculta são as tabelas de suporte do diagrama de banco de dados ou existe apenas uma. É mais útil ao procurar funções / procedimentos.
RichardTheKiwi
Por que não adicionar nomes de esquema? selecione t.schema_id, s.name, t.Name de DBNAME.sys.tables como t junção interna DBNAME.sys.schemas como s em t.schema_id = s.schema_id onde t.name like '% yourtabletosearch%' e is_ms_shipped = 0
Acroneos
10

Se você deseja examinar todas as tabelas em todos os bancos de dados do servidor e obter a saída, pode usar o procedimento sp_MSforeachdb não documentado :

sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%Table_Names%'''
resgates
fonte
3
Esta resposta é a única útil se você não sabe em qual banco de dados uma tabela pode estar
Mateus
7

Presumo que você deseja passar o nome do banco de dados como um parâmetro e não apenas executar:

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

Nesse caso, você poderia usar SQL dinâmico para adicionar o dbname à 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
fonte
5

Você também pode usar o botão Filtrar para filtrar tabelas com uma determinada string. Você pode fazer o mesmo com procedimentos armazenados e visualizações.

insira a descrição da imagem aqui

amor ao vivo
fonte
4

Adicionando à resposta de @ [RichardTheKiwi].

Sempre que procuro uma lista de tabelas, geralmente quero selecionar todas elas ou excluí-las. Abaixo está um script que gera esses scripts para você.

O script de seleção gerado também adiciona uma coluna tableName para que você saiba em qual tabela está olhando:

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
fonte
3

você também pode usar o comando show.

show tables like '%tableName%'
Naseeruddin VN
fonte
6
Esta é a sintaxe do MySQL em uma pergunta com tag sql-server
Mike Guthrie
3

Eu sei que este é um tópico antigo, mas se você preferir uma pesquisa que não diferencia maiúsculas de minúsculas:

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

Quero postar uma solução simples para cada esquema que você tem. Se você estiver usando o banco de dados MySQL, você pode simplesmente obter de seu esquema todos os nomes da tabela e adicionar a condição WHERE-LIKE a ela. Você também pode fazer isso com a linha de comando usual da seguinte maneira:

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

onde tables_in_<your_shcema_name>retorna o nome da coluna do SHOW TABLEScomando.

Marcello Marino
fonte