从服务器删除所有数据库

Mos*_*026 40 sql sql-server sql-server-2005

我有一个服务器(SQL Server 2005)有超过300个数据库.我不想一个一个地右键单击并选择Delete.

如何轻松删除所有数据库?

Mar*_*ith 105

您可以通过SSMS GUI执行此操作.选择Databases节点,然后F7打开对象资源管理器详细信息,选择要删除的所有数据库,点击"删除",然后选择"关闭现有连接"和"错误后继续"选项.

或者通过TSQL你可以做到

EXEC sp_MSforeachdb '
IF DB_ID(''?'') > 4
BEGIN
ALTER DATABASE [?] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE [?]
END'
Run Code Online (Sandbox Code Playgroud)

以上是未经测试的结果,原因应该是显而易见的,因此您可能希望DROPPRINT命令替换命令以首先验证事物.

EXEC sp_MSforeachdb '
IF DB_ID(''?'') > 4
BEGIN
PRINT (''
ALTER DATABASE [?] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE [?]'')
END
'
Run Code Online (Sandbox Code Playgroud)

  • 出于某种原因,这实际上有效:/sf/answers/3189462181/ (2认同)

Pel*_*red 15

这是我对同一问题的解决方案:

-- drops all user databases
DECLARE @command nvarchar(max)
SET @command = ''

SELECT  @command = @command
+ 'ALTER DATABASE [' + [name] + ']  SET single_user with rollback immediate;'+CHAR(13)+CHAR(10)
+ 'DROP DATABASE [' + [name] +'];'+CHAR(13)+CHAR(10)
FROM  [master].[sys].[databases] 
 where [name] not in ( 'master', 'model', 'msdb', 'tempdb');

SELECT @command
EXECUTE sp_executesql @command
Run Code Online (Sandbox Code Playgroud)


小智 5

这将终止所有连接,并删除所有不在列表中的数据库:

('master'、'tempdb'、'model'、'msdb'、'ReportServer'、'ReportServerTempDB')


use [master]

DECLARE 
@DATABASENAME nVARCHAR(20)

DECLARE
@TABLE TABLE
(NAME nVARCHAR(50))

Declare @SQL nvarchar(100)

INSERT INTO @TABLE

SELECT 
name 
FROM sys.databases 
WHERE name not in 
    ('master'
    ,'tempdb'
    ,'model'
    ,'msdb'
    ,'ReportServer'
    ,'ReportServerTempDB')


while (select COUNT(*) from @table) > 0

begin

select @DATABASENAME = (select top 1 (name) from @TABLE)

DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'
FROM master..sysprocesses 
WHERE dbid = db_id(@DATABASENAME)

EXEC(@kill);

set @SQL = 'drop database ' + @DATABASENAME

exec sp_executesql @SQL, N'@databasename nvarchar(50)', @databasename; 

print @databasename + ' has been deleted'

delete from @TABLE where NAME = @DATABASENAME

end
Run Code Online (Sandbox Code Playgroud)