Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Удаление баз кроме ... (http://forum.oszone.net/showthread.php?t=136480)

Butunin Klim 01-04-2009 11:41 1080943

Удаление баз кроме ...
 
Не могу написать скрипт который бы удалял все базы кроме 3.
У меня есть программа которая создает базы даных за неделю их получается около 2000...
Приходится вычищать все это руками.
При этом есть 2 базы который 100% необходимы для работы + естественно служебные.
Как написать все это или сделать через SQl2000 не приложу ума

Delirium 02-04-2009 01:16 1081595

Цитата:

Цитата Butunin Klim
У меня есть программа которая создает базы даных за неделю »

Имеется в виду удаление прямо из SQL сервера? ИЛи бекапов? А имена у баз все время разные или одинаковые?
это не поможет?

Butunin Klim 02-04-2009 17:20 1082108

ну да только есть у меня базы постоянно создаються название поднаковаое меняется переменная
echo_db_1 [..n]
Из всего этого N нужно оставить 10 баз с определенными номерами ... вот если бы можно было переменную какую нибудь включить

Delirium 03-04-2009 01:46 1082659

Цитата:

Цитата Butunin Klim
ну да только есть у меня базы постоянно создаються название поднаковаое меняется переменная »

Ниче не понял с этого предложения.
Давай так: идем в ICQ(в профиле), посмотрим, может мне проще будет написать программку для таких целей, чем мудрить со скриптом.

Delirium 06-04-2009 04:48 1085305

После попытки написать программу для удаления был рожден SQL скрипт, который все делает сам:

Код:

DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT top 1 [name] FROM master.dbo.sysdatabases WHERE [name] like N'echo_db_%' and [name] <> N'echo_db_2008' and [name] <> N'echo_db_2009')
WHILE @name is not null
BEGIN

    SELECT @SQL = 'DROP DATABASE [' + RTRIM(@name) +']'
    EXEC (@SQL)

    PRINT 'Dropped Databases: ' + @name

    SELECT @name = (SELECT top 1 name FROM master.dbo.sysdatabases WHERE name like N'echo_db_%' and [name] <> N'echo_db_2008' and [name] <> N'echo_db_2009')

END
GO

Смысл прост - выбирается база, не равная echo_db_2008 или echo_db_2009, и удаляется полностью, т.е. стирается с винта. Затем из списка всех баз опять выбирается следующая неудаленная и удаляется.

в PRINT 'Dropped Databases: ' + @name
в итоге выводится вот что:

читать дальше »
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_2_log.LDF'.
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_2.mdf'.
Dropped Databases: echo_db_2
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_3_log.LDF'.
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_3.mdf'.
Dropped Databases: echo_db_3
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_4_log.LDF'.
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_4.mdf'.
Dropped Databases: echo_db_4
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_5_log.LDF'.
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_5.mdf'.
Dropped Databases: echo_db_5

Butunin Klim 23-04-2009 10:01 1101774

Спасибо! Супер!


Время: 12:21.

Время: 12:21.
© OSzone.net 2001-