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)
以上是未经测试的结果,原因应该是显而易见的,因此您可能希望DROP用PRINT命令替换命令以首先验证事物.
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)
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)
| 归档时间: |
|
| 查看次数: |
48693 次 |
| 最近记录: |