删除sql server中的数据库

时间:2009-07-29 06:40:57

标签: sql-server sql-server-2008

我需要删除名称以“In”...

开头的数据库

我试过“喜欢”,但却引发语法错误......

我尝试了以下命令但是为“name”

引发了语法错误

SELECT'DROP DATABASE'+ name +';'来自sys.databases,其名称类似于'In%'

5 个答案:

答案 0 :(得分:11)

怎么样:

DECLARE @qry nvarchar(max);

SELECT @qry = 
(SELECT 'DROP DATABASE ' + name + '; ' 
FROM sys.databases 
WHERE name LIKE 'In%'
FOR XML PATH(''));

EXEC sp_executesql @qry;

答案 1 :(得分:1)

语法是

DROP DATABASE { database_name | database_snapshot_name } [ ,...n ] [;]

它不允许使用通配符或where子句。您必须手动或以编程方式执行此操作,从sys.databases获取数据库的名称。

答案 2 :(得分:0)

你可以创建一个环绕

的CURSOR
SELECT name FROM sys.databases WHERE name LIKE 'ln%'

并在循环内部创建drop语句并执行它

SET @s = 'DROP DATABASE ' + @name
EXEC (@s)

不确定这是否有效,并且我没有任何数据库可以放弃测试;)

答案 3 :(得分:0)

您可以创建一个SQL语句来为您生成脚本:

SELECT 'DROP DATABASE ' + name + ';' from sys.databases where name like 'In%'

然后运行该脚本。

因此,如果你有两个数据库InTestDB1和InTestDB2,上面会产生以下结果:

DROP DATABASE InTestDB1;
DROP DATABASE InTestDB2;

然后,您可以将其保存到文件中以作为另一台服务器上的脚本运行,或者将其直接复制到查询分析器中以立即运行。

答案 4 :(得分:0)

USE master;

DECLARE @Temp TABLE (Id INT IDENTITY(1, 1), name nvarchar(max));
DECLARE @RowCounter INT;

INSERT INTO @Temp
select name from sys.databases where name like N'In%';

SELECT @RowCounter = MAX(Id) FROM @Temp;

DECLARE @i INT;
SET @i = 1;

DECLARE @DBDeleteByName NVARCHAR(max);

WHILE @i <= @RowCounter
BEGIN
    ----- Build the drop database sql.
    SELECT @DBDeleteByName = 'DROP DATABASE ' + name 
    FROM @Temp WHERE Id = @i;

    ----- Drop the database.
    EXEC sp_executesql @DBDeleteByName;

    ----- Increment counter
    SET @i = @i + 1;

END