We have many ways to drop a database, but if you want to drop many databases.
You can have some problems with opened connections, but this script kill all connection and drop the database.
1
2-- ***************************************** --
3-- SQL Script to drop databases
4-- ***************************************** --
5--
6PRINT @@servername;
7PRINT Getdate();
8BEGIN TRY DROP TABLE #dbs; END TRY BEGIN CATCH END CATCH;
9
10--#region Select databases to DROP
11
12SELECT [name] INTO #dbs
13FROM sys.databases
14WHERE
15 database_id > 4
16 AND name NOT IN ('ReportServer','ReportServerTempDB')
17
18--#endregion Select databases to DROP
19
20--#region Drop databases
21
22USE [MASTER];
23SET NOCOUNT ON;
24DECLARE @name nvarchar(200);
25DECLARE @sql NVARCHAR(MAX);
26DECLARE @ToKill AS NVARCHAR(MAX);
27
28WHILE (EXISTS(SELECT *
29 FROM #dbs))
30BEGIN
31
32 SELECT TOP 1 @name = name
33 FROM #dbs;
34 DELETE FROM #dbs
35 WHERE
36 @name = name;
37
38 DECLARE @msg nvarchar(200) = '-- DROP Database : ' + @name;
39 RAISERROR (@msg, 10, 1) WITH NOWAIT;
40
41 SET @ToKill = '';
42 SELECT @toKill = @ToKill + 'begin try kill ' + cast(spid AS NVARCHAR(10)) + '; print ''Ok to kill : ' + cast(spid AS NVARCHAR(10)) + '''; end try begin catch print ''Fail to kill : ' + cast(spid AS NVARCHAR(10)) + '''; end catch;'
43 FROM master..sysprocesses
44 WHERE dbid = DB_ID(@name);
45
46 RAISERROR (@tokill, 10, 1) WITH NOWAIT;
47 EXEC (@tokill);
48
49 SET @sql = 'ALTER DATABASE [' + @name + '] SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE;'
50 RAISERROR (@sql, 10, 1) WITH NOWAIT;
51 EXEC (@sql);
52
53 SET @sql = 'DROP DATABASE [' + @name + ']';
54 RAISERROR (@sql, 10, 1) WITH NOWAIT;
55 EXEC (@sql);
56
57END
58
59--#endregion Drop databases
sources:
http://stackoverflow.com/questions/349358/sql-server-print-output-doesnt-appear-immediately
http://stackoverflow.com/questions/5777483/drop-all-databases-from-server
Comments