我的目的是想写一个语句,删除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'.
很奇怪,我前面的语句打出来也是对的呀,为什么会有这个错误???

解决方案 »

  1.   

    set @strExec='drop database ' + QUOTENAME(@str)
      

  2.   

    还有一种可能是你的数据库正在使用中:
    使用DROP DATABASE 删除数据库  显示“无法删除数据库 ,因为该数据库当前正在使用。” 
      

  3.   

    --加上[]
    --應該有數據開頭的數據庫名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;
      

  4.   

    我做了测试,chen8410和roy_88都是对的
    谢谢了!兄弟们
      

  5.   

    数据库得完整格式 ,因你的数据库 121,i不包含字母,必须[]引用
    要不quotename(@str),要不 
    set @strExec='drop database [' +@str+']'
    若要使用 DROP DATABASE,连接的数据库上下文必须在 master 数据库中。默认情况下,将 DROP DATABASE 权限授予数据库所有者以及 sysadmin 和 dbcreator 固定服务器角色成员,该权限不可转让。