我的目的是想写一个语句,删除SQL2005 Express上的用户数据库(做了个测试数据库121),于是就写了下面的语句
use master
declare @str varchar(50)
declare @strExec varchar(150)
DECLARE contact_cursor CURSOR FOR
SELECT name FROM sysdatabases where dbid>4OPEN contact_cursor
FETCH NEXT FROM contact_cursor INTO @strWHILE @@FETCH_STATUS = 0
BEGIN
set @strExec='drop database ' + @str
print @strExec
exec(@strExec)
FETCH NEXT FROM contact_cursor INTO @str
END
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
但是一旦执行,就提示出错:
drop database 121
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '121'.
很奇怪,我前面的语句打出来也是对的呀,为什么会有这个错误???
use master
declare @str varchar(50)
declare @strExec varchar(150)
DECLARE contact_cursor CURSOR FOR
SELECT name FROM sysdatabases where dbid>4OPEN contact_cursor
FETCH NEXT FROM contact_cursor INTO @strWHILE @@FETCH_STATUS = 0
BEGIN
set @strExec='drop database ' + @str
print @strExec
exec(@strExec)
FETCH NEXT FROM contact_cursor INTO @str
END
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
但是一旦执行,就提示出错:
drop database 121
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '121'.
很奇怪,我前面的语句打出来也是对的呀,为什么会有这个错误???
使用DROP DATABASE 删除数据库 显示“无法删除数据库 ,因为该数据库当前正在使用。”
--應該有數據開頭的數據庫名use master
go
declare @str varchar(50)
declare @strExec varchar(150)
DECLARE contact_cursor CURSOR FOR
SELECT name FROM sysdatabases where dbid>4OPEN contact_cursor
FETCH NEXT FROM contact_cursor INTO @strWHILE @@FETCH_STATUS = 0
BEGIN
set @strExec='drop database [' + @str+']'--加上[]
print @strExec
exec(@strExec)
FETCH NEXT FROM contact_cursor INTO @str
END
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
谢谢了!兄弟们
要不quotename(@str),要不
set @strExec='drop database [' +@str+']'
若要使用 DROP DATABASE,连接的数据库上下文必须在 master 数据库中。默认情况下,将 DROP DATABASE 权限授予数据库所有者以及 sysadmin 和 dbcreator 固定服务器角色成员,该权限不可转让。