只是为了澄清,这不是一个真正的问题,更多的帮助像我这样的人正在寻找答案.
许多应用程序创建临时表等,但是当Team Foundation Server在我的测试sql Server上创建了80个数据库时,我感到惊讶. TFS安装不正确,请稍后再重新安装.由于每个数据库都有一个命名约定,而是手动删除每个数据库,我记得如何使用游标,并写出了我认为是最不明智的T-sql的一切:
许多应用程序创建临时表等,但是当Team Foundation Server在我的测试sql Server上创建了80个数据库时,我感到惊讶. 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;
不用说,使用这样的游标可能是非常危险的,应该非常小心.这对我有用,我还没有看到任何进一步的损害我的数据库,但我不承担:使用此代码风险自负,并备份您的重要数据!
另外,如果这个应该删除,因为这不是一个问题,我明白了.只是想把这个发布在人们会看的地方.
解决方法
这很容易
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