Как удалить несколько баз данных в SQL Server

Просто чтобы уточнить, это не совсем вопрос, скорее помощь для таких людей, как я, которые искали ответ.
Многие приложения создают временные таблицы и тому подобное, но я был удивлен, когда Team Foundation Server создал более 80 баз данных на моем тестовом SQL Server. TFS не установился правильно и любезно предоставил мне разобраться после этого. Поскольку каждая база данных имела соглашение об именах, вместо того, чтобы удалять каждую базу данных вручную, я вспомнил, как использовать курсоры, и написал, что я считаю самой неразумной частью T-SQL:

   CREATE TABLE #databaseNames (name varchar(100) NOT NULL, db_size varchar(50), owner varchar(50), dbid int, created date, status text, compatibility_level int);
INSERT #databaseNames
    exec sp_helpdb;

DECLARE dropCur CURSOR FOR
    SELECT name FROM #databaseNames WHERE name like '_database_name_%';
OPEN dropCur;
DECLARE @dbName nvarchar(100);
FETCH NEXT FROM dropCur INTO @dbName;
DECLARE @statement nvarchar(200);
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @statement = 'DROP DATABASE ' + @dbName;
    EXEC sp_executesql @statement;
    FETCH NEXT FROM dropCur INTO @dbName;
END
CLOSE dropCur;
DEALLOCATE dropCur;
DROP TABLE #databaseNames;

Само собой разумеется, что использование курсоров как это, вероятно, действительно опасно, и его следует использовать с особой осторожностью. Это сработало для меня, и я еще не заметил, чтобы моя база данных была повреждена, но я отказываюсь: используйте этот код на свой страх и риск и сначала сделайте резервную копию важных данных!
Кроме того, если это следует удалить, потому что это не вопрос, я понимаю. Просто хотел опубликовать это где люди будут смотреть.

22
задан Kara 25 March 2014 в 00:39
поделиться