Удалить все таблицы, имена которых начинаются с определенной строки - PullRequest
136 голосов
/ 07 августа 2008

Я бы хотел, чтобы скрипт отбрасывал все таблицы, имя которых начинается с заданной строки. Я уверен, что это может быть сделано с некоторыми динамическими SQL и таблицами INFORMATION_SCHEMA.

Если у кого-то есть скрипт или он может быстро его сломать, пожалуйста, опубликуйте его.

Если никто не отправит ответ, прежде чем я сам это выясню, я опубликую свое решение.

Ответы [ 14 ]

0 голосов
/ 16 февраля 2015

Я должен был сделать небольшую деривацию ответа Ксенфа Яна, я подозреваю, потому что у меня были таблицы не в схеме по умолчанию.

SELECT 'DROP TABLE Databasename.schema.' + TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE 'strmatch%'
0 голосов
/ 01 августа 2014
SELECT 'if object_id(''' + TABLE_NAME + ''') is not null begin drop table "' + TABLE_NAME + '" end;' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '[prefix]%'
0 голосов
/ 24 июня 2013
select 'DROP TABLE ' + name from sysobjects
where type = 'U' and sysobjects.name like '%test%'

- проверка имени таблицы

0 голосов
/ 07 августа 2008

Спасибо, Курт, это то же решение, что и я на полпути.

Твой лучше, чем мой - он легко поддается модификации. Я добавил объединение в select и также уничтожил некоторые представления;)

declare @cmd varchar(4000)
declare cmds cursor for 
Select 'drop table [' + Table_Name + ']'
From    INFORMATION_SCHEMA.TABLES
Where   Table_Name like 'prefix%'
union
Select 'drop view [' + Table_Name + ']'
From    INFORMATION_SCHEMA.VIEWS
Where   Table_Name like 'prefix%'
open cmds
while 1=1
begin
    fetch cmds into @cmd
    if @@fetch_status != 0 break
    exec(@cmd)
end
close local
deallocate local

Не волнуйтесь, это не производственная база данных - это просто для простой очистки моей базы данных разработчика, пока я что-то пробую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...