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


102

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

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

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

Ответы:



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

комментирование строки 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;

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.