如何在SQL Server中删除多个数据库

Gar*_*arr 22 t-sql database sql-drop

只是为了澄清,这不是一个真正的问题,对于像我这样寻找答案的人来说更有帮助.
很多应用程序都会创建临时表等,但是当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;
Run Code Online (Sandbox Code Playgroud)

不言而喻,使用这样的游标可能非常危险,应该谨慎使用.这对我有用,我还没有看到对我的数据库造成任何进一步的损害,但我不承认:使用此代码需要您自担风险,并首先备份您的重要数据!
此外,如果这应该删除,因为这不是一个问题,我明白.只是想把它贴在人们看的地方.

小智 52

为什么不这样做呢?

USE master;
Go
SELECT 'DROP DATABASE ['+ name + ']' 
FROM sys.databases WHERE name like '_database_name_%';
GO
Run Code Online (Sandbox Code Playgroud)

捕获该结果集的输出,然后将其粘贴到另一个查询窗口中.然后运行它.为什么要编写所有这些TSQL游标代码?

"当你拿锤子时,一切看起来像钉子!"..

  • 这是手动数据库删除的绝佳解决方案.我在测试期间生成了很多数据库,当我中止测试运行时,我通常最终得到10-20个数据库.生成此输出使我能够轻松查看将删除的内容.我只建议将输出修改为`SELECT'DROP DATABASE ['+ name +']'`来考虑db名称中的特殊字符,这是我需要做的修复. (5认同)

Ser*_*usM 26

这很简单...

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
Run Code Online (Sandbox Code Playgroud)