执行varchar类型的字符串操作出错

rocllllll 2010-11-10 09:41:33
我的目的是想写一个语句,删除SQL2005 Express上的用户数据库(做了个测试数据库121),于是就写了下面的语句
use master
declare @str varchar(50)
declare @strExec varchar(150)
DECLARE contact_cursor CURSOR FOR
SELECT name FROM sysdatabases where dbid>4

OPEN contact_cursor
FETCH NEXT FROM contact_cursor INTO @str

WHILE @@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'.
很奇怪,我前面的语句打出来也是对的呀,为什么会有这个错误???
...全文
123 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
abuying 2010-11-10
  • 打赏
  • 举报
回复
数据库得完整格式 ,因你的数据库 121,i不包含字母,必须[]引用
要不quotename(@str),要不
set @strExec='drop database [' +@str+']'
若要使用 DROP DATABASE,连接的数据库上下文必须在 master 数据库中。

默认情况下,将 DROP DATABASE 权限授予数据库所有者以及 sysadmin 和 dbcreator 固定服务器角色成员,该权限不可转让。
rocllllll 2010-11-10
  • 打赏
  • 举报
回复
我做了测试,chen8410和roy_88都是对的
谢谢了!兄弟们
中国风 2010-11-10
  • 打赏
  • 举报
回复
--加上[]
--應該有數據開頭的數據庫名

use master
go
declare @str varchar(50)
declare @strExec varchar(150)
DECLARE contact_cursor CURSOR FOR
SELECT name FROM sysdatabases where dbid>4

OPEN contact_cursor
FETCH NEXT FROM contact_cursor INTO @str

WHILE @@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;
chen8410 2010-11-10
  • 打赏
  • 举报
回复
还有一种可能是你的数据库正在使用中:
使用DROP DATABASE 删除数据库 显示“无法删除数据库 ,因为该数据库当前正在使用。”
rucypli 2010-11-10
  • 打赏
  • 举报
回复
exec空格(@strExec)
chen8410 2010-11-10
  • 打赏
  • 举报
回复
set @strExec='drop database ' + QUOTENAME(@str)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧