我需要删除名称以“In”...
开头的数据库我试过“喜欢”,但却引发语法错误......
我尝试了以下命令但是为“name”
引发了语法错误SELECT'DROP DATABASE'+ name +';'来自sys.databases,其名称类似于'In%'
答案 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)
你可以创建一个环绕
的CURSORSELECT 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