Поиск названий таблиц

102

Для поиска строк в моих хранимых процедурах я использую следующее:

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

Легко ли изменить приведенное выше, чтобы он выполнял поиск по именам таблиц в конкретном db "DBname"?

почему
источник

Ответы:

151

Я использую это и отлично работает

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%%'
НешаСербия
источник
3
Включает также просмотры :-)
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
источник
комментирование строки and is_ms_shipped = 0;, похоже, мало что
дает
2
Единственное, что он обычно скрывает, - это таблицы поддержки диаграмм базы данных или только одна. Это более полезно при поиске функций / процедур.
RichardTheKiwi
Почему бы не добавить имена схем? выберите t.schema_id, s.name, t.Name из DBNAME.sys.tables как внутреннее соединение DBNAME.sys.schemas как s на t.schema_id = s.schema_id, где t.name как '% yourtabletosearch%' и is_ms_shipped = 0
Acroneos
11

Если вы хотите просмотреть все таблицы во всех базах данных на сервере и получить результат, вы можете использовать недокументированную процедуру sp_MSforeachdb :

sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%Table_Names%'''
рансемс
источник
3
Этот ответ - единственный полезный, если вы не знаете, в какой базе данных может быть таблица
Мэтью,
7

Я предполагаю, что вы хотите передать имя базы данных в качестве параметра, а не просто запустить:

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

Если это так, вы можете использовать динамический SQL для добавления имени базы данных в запрос:

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
источник
5

Вы также можете использовать кнопку «Фильтр» для фильтрации таблиц с определенной строкой в ​​ней. То же самое можно сделать с хранимыми процедурами и представлениями.

введите описание изображения здесь

живи любя
источник
4

Добавление к ответу @ [RichardTheKiwi].

Всякий раз, когда я ищу список таблиц, я обычно хочу выбрать из всех или удалить их. Ниже приведен сценарий, который генерирует эти сценарии для вас.

Сгенерированный скрипт выбора также добавляет столбец tableName, чтобы вы знали, на какую таблицу вы смотрите:

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

Я знаю, что это старый поток, но если вы предпочитаете поиск без учета регистра:

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE Lower(TABLE_NAME) LIKE Lower('%%')
Тим Стек
источник
2

вы также можете использовать команду show.

show tables like '%tableName%'
Насируддин В.Н.
источник
6
Это синтаксис MySQL для вопроса с тегом sql-server
Майк Гатри,
2

Я хочу опубликовать простое решение для каждой вашей схемы. Если вы используете MySQL DB, вы можете просто получить из своей схемы все имя таблицы и добавить к нему условие WHERE-LIKE. Вы также можете сделать это с помощью обычной командной строки следующим образом:

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

где tables_in_<your_shcema_name>возвращает имя столбца SHOW TABLESкоманды.

Марчелло Марино
источник