首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从服务器删除所有数据库

从服务器删除所有数据库
EN

Stack Overflow用户
提问于 2011-04-25 18:31:02
回答 9查看 64.7K关注 0票数 45

我有一台拥有300多个数据库的服务器(SQL Server2005)。我不想逐个右键单击并选择Delete

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

EN

回答 9

Stack Overflow用户

发布于 2013-09-13 21:32:17

下面是我对同样问题的解决方案:

代码语言:javascript
运行
复制
-- 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
票数 17
EN

Stack Overflow用户

发布于 2016-07-29 23:53:41

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

(‘主’,‘临时数据库’,‘模型’,'msdb‘,'ReportServer’,'ReportServerTempDB')

代码语言:javascript
运行
复制
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
票数 4
EN

Stack Overflow用户

发布于 2017-12-18 01:27:55

使用T-SQL删除(删除) MS-SQL中的所有数据库的安全方法是排除所有系统数据库、要保留的任何其他数据库以及特殊数据库,如数据仓库数据库"DW“、报表服务器数据库。

排除我们想要保留的所有数据库,包括所有系统数据库,这样就可以安全地删除我们不想保留的所有其他数据库。

例如:

代码语言:javascript
运行
复制
use master
go
declare @dbnames nvarchar(max)
declare @statement nvarchar(max)
set @dbnames = ''
set @statement = ''
select @dbnames = @dbnames + ',[' + name + ']' from sys.databases 
    where name 
    NOT IN ('master','model','msdb','tempdb') 
    AND name NOT LIKE '%AdventureWorks%' -- Database to keep 
    AND name NOT LIKE '%DW%' -- Data warehouse database
    AND name NOT LIKE '%ReportServer%' -- Report server database
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
go
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5777483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档