Выборка и удаление таблиц по маске

Рейтинг: 1Ответов: 2Опубликовано: 22.10.2014

В базе данных есть таблицы с именами вида shablon_4YVC, shablon_6HGFT, shablon_9GGNF и т.д.

Как сделать DROP всех таких таблиц, не перечисляя их поименно?
Нужно что-то типа:

DROP TABLE LIKE 'shablon_%'

Ответы

▲ 2

В SQL Server есть такая недокументированная процедура:

   exec sp_MSforeachtable @command1 = 'drop table ?', 
        @whereand = 'and o.name like ''%pattern%'' and xtype=''U'''

Однако могут помешать внешние ключи, как, впрочем, и при любом другом способе. Так что сначала нужно дропнуть ссылочные ограничения, а потом таблицы.

▲ 1

Вы не указали какую СУБД Вы используете, поэтому приведу пример для MS SQLServer.

Для начала надо получить список таблиц:

SELECT
    name
FROM
    sys.obejcts
WHERE
    name LIKE '%pattern%'
    AND type = 'U' --пользовательская таблица

Затем перебираете все и для каждого генерируете строчку с нужной инструкцией. После чего выполняете эту строку как скрипт. В SQLServer'е для этого можно сделать EXEC('...'), но лучше воспользоваться sp_executesql.

Только будьте предельно внимательны при подобных операциях, дабы не грохнуть лишнего.