Выборка и удаление таблиц по маске
В базе данных есть таблицы с именами вида shablon_4YVC
, shablon_6HGFT
, shablon_9GGNF
и т.д.
Как сделать DROP всех таких таблиц, не перечисляя их поименно?
Нужно что-то типа:
DROP TABLE LIKE 'shablon_%'
В базе данных есть таблицы с именами вида shablon_4YVC
, shablon_6HGFT
, shablon_9GGNF
и т.д.
Как сделать DROP всех таких таблиц, не перечисляя их поименно?
Нужно что-то типа:
DROP TABLE LIKE 'shablon_%'
В SQL Server есть такая недокументированная процедура:
exec sp_MSforeachtable @command1 = 'drop table ?',
@whereand = 'and o.name like ''%pattern%'' and xtype=''U'''
Однако могут помешать внешние ключи, как, впрочем, и при любом другом способе. Так что сначала нужно дропнуть ссылочные ограничения, а потом таблицы.
Вы не указали какую СУБД Вы используете, поэтому приведу пример для MS SQLServer.
Для начала надо получить список таблиц:
SELECT
name
FROM
sys.obejcts
WHERE
name LIKE '%pattern%'
AND type = 'U' --пользовательская таблица
Затем перебираете все и для каждого генерируете строчку с нужной инструкцией. После чего выполняете эту строку как скрипт. В SQLServer'е для этого можно сделать EXEC('...')
, но лучше воспользоваться sp_executesql.
Только будьте предельно внимательны при подобных операциях, дабы не грохнуть лишнего.