Пошук назв таблиць


99

Я використовую наступне для пошуку рядків у своїх збережених процедурах:

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;, здається, не дуже багато
чомуtheq

2
Єдине, що він зазвичай приховує, - це таблиці підтримки схеми бази даних, або існує лише одна. Це корисніше при пошуку функцій / процедур.
RichardTheKiwi

Чому б не додати імена схем? виберіть t.schema_id, s.name, t. 0
Acroneos

10

Якщо ви хочете переглянути всі таблиці всіх баз даних на всьому сервері та отримати вихідні дані, ви можете скористатися недокументованою процедурою 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 для додавання імені db до запиту:

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].

Кожного разу, коли я шукаю список таблиць, загалом я хочу вибрати з них або видалити їх. Нижче наведено сценарій, який генерує ці сценарії для вас.

Створений скрипт select також додає стовпець 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.