2010-06-23 37 views
3

我有一个测试,我们最终获得了大量的数据库称为PREFIX.whatever期间会为每个新客户一个单独的数据库(SQL Server 2008中),应用程序......DROP DATABASE在SQL Server通配符

我很喜欢一个脚本,它会查找所有以PREFIX开头的数据库。并放下它们,以便我们可以开始一个干净的测试周期。任何帮助不胜感激。

回答

3

更新:

我们最终扩大了Baaju的答案,所以我想我会分享它。我们称之为MSBuild的以下脚本,它清除了测试期间创建的所有现有数据库:

use master 

DECLARE @Name nvarchar(1000); 

DECLARE testdb_cursor CURSOR FOR 
SELECT 'ALTER DATABASE' + '[' + NAME + ']' + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE DROP DATABASE ' + '[' + NAME + ']' FROM sys.sysdatabases where name like 'TCM.%' 

OPEN testdb_cursor; 

-- Perform the first fetch and store the value in a variable. 
FETCH NEXT FROM testdb_cursor 
INTO @Name; 

-- Check @@FETCH_STATUS to see if there are any more rows to fetch. 
WHILE @@FETCH_STATUS = 0 
BEGIN 

    -- Concatenate and display the current values in the variables. 
    exec sp_executesql @Name; 

    -- This is executed as long as the previous fetch succeeds. 
    FETCH NEXT FROM testdb_cursor 
    INTO @Name; 
    END 

CLOSE testdb_cursor; 
DEALLOCATE testdb_cursor; 
13
SELECT ' DROP DATABASE [' + NAME + ']' FROM sys.sysdatabases where name like 'PREFIX%' 

复制输出并执行此操作以删除条件中的数据库。您也可以每天安排一次,并稍微调整一下。

+0

伟大的工作就像一个魅力。 – abarr 2010-06-23 12:21:54

+1

+1清洁和简单 - 伟大的解决方案 – 2010-06-23 12:42:23

+0

由于数据库名称可能包含特殊字符;用[]包围数据库名称会更好。 SELECT'DROP DATABASE ['+ NAME +']'FROM sys.sysdatabases where name like'prefix%' – 2017-07-25 09:22:42