我只想澄清一下,这不是一个真正的问题,更多的是对像我这样正在寻找答案的人的一些帮助.
很多应用程序都会创建临时表之类的东西,但是当Team Foundation Server在我的测试SQL Server上创建了80多个数据库时,我感到很惊讶.TFS没有正确安装,请让我在安装后清理.因 for each 数据库都有一个命名约定,而不是手动删除每个数据库,所以我记得如何使用游标,并编写了我认为是有史以来最不明智的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;

不用说,使用这样的游标可能真的很危险,应该极其谨慎地使用.这对我很有效,我还没有看到我的数据库有任何进一步的损坏,但我声明:使用此代码的风险自负,并首先备份您的重要数据!
另外,如果因为这不是问题而应该删除这一点,我可以理解.只是想把这个贴到人们会看的地方.

推荐答案

这很简单...

use master
go
declare @dbnames nvarchar(max)
declare @statement nvarchar(max)
set @dbnames = ''
set @statement = ''
select @dbnames = @dbnames + ',[' + name + ']' from sys.databases where name like 'name.of.db%'
if len(@dbnames) = 0
    begin
    print 'no databases to drop'
    end
else
    begin
    set @statement = 'drop database ' + substring(@dbnames, 2, len(@dbnames))
    print @statement
    exec sp_executesql @statement
    end

Database相关问答推荐

将光标中找到的值输出到logcat?

tzname字段/时区标识符名称的最大长度

在 Oracle 中查找数据库的大小

使用 Mongoose 删除索引的推荐方法是什么?

SQL Select 用字符串替换整数

数据库供应商如何实现事务?

存储所有排列的模式数据库

微服务:每个实例或每个微服务的数据源?

Symfony ArrayCollection 与 PersistentCollection

单向和双向关系关系的区别

Django中的Atomic原子操作?

执行语句还是运行脚本?

从 postgresql 转储文件填充 MySQL 数据库

将用户数据存储在 LDAP 而不是 RDBMS 中的原因

游戏中使用什么样的数据库?

ORM 还是Vietnam of Computer Science吗?

SQLite3 数据库的最大连接数是多少?

Windows phone 7 的本地 Sql 数据库支持

无需安装的轻量级 SQL 数据库

在 Heroku 上预编译assets时如何普遍跳过数据库接触