Suche nach Tabellennamen


96

Ich verwende Folgendes, um in meinen gespeicherten Prozeduren nach Zeichenfolgen zu suchen:

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

Ist es einfach, das oben Gesagte so zu ändern, dass Tabellennamen in einer bestimmten Datenbank "DBname" durchsucht werden?

Antworten:


139

Ich benutze dies und funktioniert gut

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

3
Beinhaltet auch Ansichten :-)
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

Das and is_ms_shipped = 0;
Auskommentieren

2
Das einzige, was es normalerweise verbirgt, sind die Datenbankdiagramm-Unterstützungstabellen oder es gibt nur eine. Dies ist nützlicher, wenn Sie nach Funktionen / Prozeduren suchen.
RichardTheKiwi

Warum nicht Schemanamen hinzufügen? Wählen Sie t.schema_id, s.name, t.Name aus DBNAME.sys.tables als t inner join DBNAME.sys.schemas als s auf t.schema_id = s.schema_id aus, wobei t.name wie '% yourtabletosearch%' und is_ms_shipped = 0
Acroneos

10

Wenn Sie alle Tabellen in allen Datenbanken serverweit durchsuchen und eine Ausgabe erhalten möchten, können Sie die undokumentierte Prozedur sp_MSforeachdb verwenden:

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

3
Diese Antwort ist die einzig nützliche, wenn Sie nicht wissen, in welcher Datenbank sich eine Tabelle befinden könnte
Matthew

7

Ich gehe davon aus, dass Sie den Datenbanknamen als Parameter übergeben und nicht nur ausführen möchten:

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

In diesem Fall können Sie dynamisches SQL verwenden, um den Datenbanknamen zur Abfrage hinzuzufügen:

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

Sie können auch die Schaltfläche Filter verwenden, um Tabellen mit einer bestimmten Zeichenfolge zu filtern. Sie können dasselbe mit gespeicherten Prozeduren und Ansichten tun.

Geben Sie hier die Bildbeschreibung ein


4

Hinzufügen zur Antwort von @ [RichardTheKiwi].

Wenn ich nach einer Liste von Tabellen suche, möchte ich im Allgemeinen aus allen auswählen oder sie löschen. Unten finden Sie ein Skript, das diese Skripte für Sie generiert.

Das generierte Auswahlskript fügt außerdem eine tableName-Spalte hinzu, damit Sie wissen, um welche Tabelle es sich handelt:

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

Sie können auch den Befehl show verwenden.

show tables like '%tableName%'

6
Dies ist MySQL-Syntax auf einer Frage mit dem Tag SQL-Server
Mike Guthrie

3

Ich weiß, dass dies ein alter Thread ist, aber wenn Sie die Suche ohne Berücksichtigung der Groß- und Kleinschreibung bevorzugen:

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

2

Ich möchte für jedes Schema, das Sie haben, eine einfache Lösung veröffentlichen. Wenn Sie MySQL DB verwenden, können Sie einfach den gesamten Tabellennamen aus Ihrem Schema abrufen und die WHERE-LIKE-Bedingung hinzufügen. Sie können dies auch mit der üblichen Befehlszeile wie folgt tun:

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

Dabei wird tables_in_<your_shcema_name>der SHOW TABLESBefehlsname der Spalte zurückgegeben .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.