it-swarm.com.de

Suche nach Tabellennamen

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, die obigen Änderungen vorzunehmen, damit Tabellennamen in einer bestimmten Datenbank "DBname" gesucht werden?

81
whytheq

Ich benutze dies und funktioniert gut

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%%'
98
NeshaSerbia
select name
  from DBname.sys.tables
 where name like '%xxx%'
   and is_ms_shipped = 0; -- << comment out if you really want to see them
85
RichardTheKiwi

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;
7
GarethD

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

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

Hinzufügen zu der Antwort von @ [RichardTheKiwi].

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

Das generierte Auswahlskript fügt auch eine tableName-Spalte hinzu, damit Sie wissen, welche Tabelle Sie betrachten:

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; 
4
Rafi

sie können auch den Befehl show verwenden.

show tables like '%tableName%'
3
Naseeruddin V N

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

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

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.

enter image description here

2
live-love

Ich möchte eine einfache Lösung für jedes Schema veröffentlichen, das Sie haben. Wenn Sie MySQL DB verwenden, können Sie einfach den Namen der Tabelle 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 gibt tables_in_<your_shcema_name> den Spaltennamen des Befehls SHOW TABLES zurück.

2
Marcello Marino