Ricerca di nomi di tabelle


97

Utilizzo quanto segue per cercare stringhe nelle mie stored procedure:

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

È facile modificare quanto sopra in modo che cerchi i nomi delle tabelle in uno specifico db "DBname"?

Risposte:


140

Lo sto usando e funziona bene

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%%'

3
Include anche le visualizzazioni :-)
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

commentare la linea and is_ms_shipped = 0;non sembra fare molto
whytheq

2
L'unica cosa che normalmente nasconde sono le tabelle di supporto del diagramma del database, o ce n'è solo una. È più utile quando si cercano funzioni / procedure.
RichardTheKiwi

Perché non aggiungere i nomi degli schemi? seleziona t.schema_id, s.name, t.Name da DBNAME.sys.tables come t inner join DBNAME.sys.schemas come s su t.schema_id = s.schema_id dove t.name come '% yourtabletosearch%' e is_ms_shipped = 0
Acroneos

10

Se si desidera cercare in tutte le tabelle in tutti i database a livello di server e ottenere l'output, è possibile utilizzare la procedura sp_MSforeachdb non documentata :

sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%Table_Names%'''

3
Questa risposta è l'unica utile se non sai in quale database potrebbe trovarsi una tabella
Matthew

7

Suppongo che tu voglia passare il nome del database come parametro e non solo eseguire:

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

In tal caso, è possibile utilizzare SQL dinamico per aggiungere il nome db alla query:

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;

5

Puoi anche utilizzare il pulsante Filtro per filtrare le tabelle con una determinata stringa. Puoi fare lo stesso con stored procedure e viste.

inserisci qui la descrizione dell'immagine


4

Aggiungendo alla risposta di @ [RichardTheKiwi].

Ogni volta che cerco un elenco di tabelle, in generale desidero selezionarle tutte o eliminarle. Di seguito è riportato uno script che genera quegli script per te.

Lo script di selezione generato aggiunge anche una colonna tableName in modo da sapere quale tabella stai guardando:

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; 

3

puoi anche usare il comando show.

show tables like '%tableName%'

6
Questa è la sintassi MySQL su una domanda etichettata sql-server
Mike Guthrie

3

So che questo è un vecchio thread, ma se preferisci la ricerca senza distinzione tra maiuscole e minuscole:

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE Lower(TABLE_NAME) LIKE Lower('%%')

2

Voglio pubblicare una soluzione semplice per ogni schema che hai. Se stai usando MySQL DB, puoi semplicemente ottenere dallo schema tutto il nome della tabella e aggiungere la condizione WHERE-LIKE su di esso. Puoi anche farlo con la solita riga di comando come segue:

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

dove tables_in_<your_shcema_name>restituisce il nome del SHOW TABLEScomando della colonna .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.