这段sql脚本在干什么?

confirmAname 2014-04-12 01:27:40
declare @tname varchar(8000)
set @tname=''
select @tname=@tname+Name+','from sysobjects where xtype='U'
select @tname='drop table '+ left(@tname,len(@tname)-1)
exec(@tname)
@tname不是变量吗?exec不是执行存储过程的吗?看不懂,求指导
...全文
141 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shinger126 2014-04-14
  • 打赏
  • 举报
回复
简单来讲,这段代码就是将数据库中的所有用户表drop掉
Mr_Nice 2014-04-14
  • 打赏
  • 举报
回复
引用 4 楼 confirmAname 的回复:
[quote=引用 1 楼 OrchidCat 的回复:]
declare @tname varchar(8000)
set @tname=''
select @tname=@tname+Name+','from sysobjects where xtype='U'    --获取数据库中的所有用户表
select @tname='drop table '+ left(@tname,len(@tname)-1)                   --拼接成 drop table 用户表的样式
exec(@tname)                                                                                                   --执行删除的命令
第二行脚本,你说是获取数据库中的所有用户表,我想问的是那个Name是怎么回事,既不是变量,也不是字符串,还有单引号里的逗号,也不能理解。[/quote] 那个name是表里的字段,
select * from sysobjects
可以看到。
yoan2014 2014-04-12
  • 打赏
  • 举报
回复
引用 4 楼 confirmAname 的回复:
[quote=引用 1 楼 OrchidCat 的回复:]
declare @tname varchar(8000)
set @tname=''
select @tname=@tname+Name+','from sysobjects where xtype='U'    --获取数据库中的所有用户表
select @tname='drop table '+ left(@tname,len(@tname)-1)                   --拼接成 drop table 用户表的样式
exec(@tname)                                                                                                   --执行删除的命令
第二行脚本,你说是获取数据库中的所有用户表,我想问的是那个Name是怎么回事,既不是变量,也不是字符串,还有单引号里的逗号,也不能理解。[/quote]name是sysobjects表中的字段 ,逗号是因为drop table的语法可以将多个table名用逗号隔开一起drop掉所以将所有得到的用户表名使用逗号隔开放到变量@tname,然后再在所有的表明前加上drop table 就可以组成
drop table a,b,c,d,e
类似的sql语句了
confirmAname 2014-04-12
  • 打赏
  • 举报
回复
引用 1 楼 OrchidCat 的回复:
declare @tname varchar(8000)
set @tname=''
select @tname=@tname+Name+','from sysobjects where xtype='U'    --获取数据库中的所有用户表
select @tname='drop table '+ left(@tname,len(@tname)-1)                   --拼接成 drop table 用户表的样式
exec(@tname)                                                                                                   --执行删除的命令
第二行脚本,你说是获取数据库中的所有用户表,我想问的是那个Name是怎么回事,既不是变量,也不是字符串,还有单引号里的逗号,也不能理解。
confirmAname 2014-04-12
  • 打赏
  • 举报
回复
引用 2 楼 yoan2014 的回复:
你可以在exec前將@tname print出來看看,實際上就是一段SQL語句,只是通過這種方式可以根據程式的需要對@tname也就是執行的SQL語句進行動態變化
谢谢。顺便问一句,你用繁体字,你是台湾或香港的coder吗?
yoan2014 2014-04-12
  • 打赏
  • 举报
回复
你可以在exec前將@tname print出來看看,實際上就是一段SQL語句,只是通過這種方式可以根據程式的需要對@tname也就是執行的SQL語句進行動態變化
Mr_Nice 2014-04-12
  • 打赏
  • 举报
回复
declare @tname varchar(8000)
set @tname=''
select @tname=@tname+Name+','from sysobjects where xtype='U'    --获取数据库中的所有用户表
select @tname='drop table '+ left(@tname,len(@tname)-1)                   --拼接成 drop table 用户表的样式
exec(@tname)                                                                                                   --执行删除的命令

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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