Wyszukiwanie nazw tabel

102

Używam następujących poleceń do wyszukiwania ciągów w moich procedurach składowanych:

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

Czy łatwo jest zmienić powyższe, aby przeszukiwały nazwy tabel w określonej bazie danych „DBname”?

whytheq
źródło

Odpowiedzi:

150

Używam tego i działa dobrze

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%%'
NeshaSerbia
źródło
3
Obejmuje również wyświetlenia :-)
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
źródło
komentowanie linii and is_ms_shipped = 0;nie wydaje się wiele
zdziałać
2
Jedyną rzeczą, którą zwykle ukrywa, są tabele obsługi diagramów bazy danych lub jest tylko jedna. Jest to bardziej przydatne podczas wyszukiwania funkcji / procedur.
RichardTheKiwi
Dlaczego nie dodać nazw schematów? wybierz t.schema_id, s.name, t.Name z DBNAME.sys.tables jako t łączenie wewnętrzne DBNAME.sys.schemas as s na t.schema_id = s.schema_id, gdzie t.name, takie jak „% yourtabletosearch%” i is_ms_shipped = 0
Acroneos,
11

Jeśli chcesz przejrzeć wszystkie tabele we wszystkich bazach danych na całym serwerze i uzyskać dane wyjściowe, możesz skorzystać z nieudokumentowanej procedury sp_MSforeachdb :

sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%Table_Names%'''
okupy
źródło
3
Ta odpowiedź jest jedyną przydatną, jeśli nie wiesz, w której bazie danych może znajdować się tabela
Matthew
7

Zakładam, że chcesz przekazać nazwę bazy danych jako parametr, a nie tylko uruchomić:

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

Jeśli tak, możesz użyć dynamicznego SQL, aby dodać nazwę bazy danych do zapytania:

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
źródło
5

Możesz także użyć przycisku Filtruj, aby przefiltrować tabele zawierające określony ciąg. Możesz zrobić to samo z procedurami składowanymi i widokami.

wprowadź opis obrazu tutaj

miłość na żywo
źródło
4

Dodanie do odpowiedzi @ [RichardTheKiwi].

Zawsze, gdy szukam listy tabel, generalnie chcę wybrać z nich wszystkie lub je usunąć. Poniżej znajduje się skrypt, który generuje te skrypty za Ciebie.

Wygenerowany skrypt wyboru dodaje również kolumnę tableName, dzięki czemu wiesz, na którą tabelę patrzysz:

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
źródło
3

Wiem, że to stary wątek, ale jeśli wolisz wyszukiwanie bez rozróżniania wielkości liter:

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE Lower(TABLE_NAME) LIKE Lower('%%')
Tim Stack
źródło
2

możesz także użyć polecenia show.

show tables like '%tableName%'
Naseeruddin VN
źródło
6
To jest składnia MySQL w pytaniu oznaczonym tagiem sql-server
Mike Guthrie
2

Chcę opublikować proste rozwiązanie dla każdego schematu, który masz. Jeśli używasz MySQL DB, możesz po prostu pobrać ze swojego schematu całą nazwę tabeli i dodać do niej warunek WHERE-LIKE. Możesz to również zrobić za pomocą zwykłego wiersza poleceń w następujący sposób:

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

gdzie tables_in_<your_shcema_name>zwraca nazwę SHOW TABLESpolecenia kolumny .

Marcello Marino
źródło