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”?
sql
sql-server
sql-server-2008-r2
whytheq
źródło
źródło
select name from DBname.sys.tables where name like '%xxx%' and is_ms_shipped = 0; -- << comment out if you really want to see them
źródło
and is_ms_shipped = 0;
nie wydaje się wieleJeś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%'''
źródło
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;
źródło
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.
źródło
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;
źródło
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('%%')
źródło
możesz także użyć polecenia show.
show tables like '%tableName%'
źródło
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 TABLES
polecenia kolumny .źródło