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”?

Odpowiedzi:



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

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%'''

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;

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


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; 

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('%%')


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 .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.