删除数据库中所有表

一个数据库中可能有很多表,而我想全部删除,如果一个一个手动删除太麻烦而且浪费时间。
涉及两个问题:1.如何知道这个数据库里有哪些表?2.如何把这些表名读取出来?
这两个问题解决了,就方便多了。
第一个问题:
select name from sysobjects
where xtype='U'

sysobjects表
在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。

xtype='U'表示用户表

第二个问题:
可以把表名读取出来放到一个表变量中,然后再利用while 循环去drop table

   1:  declare @tabletemp TABLE (ID INT identity(1,1),NAME NVARCHAR(50));
   2:  declare @i int;
   3:  set @i=1;
   4:  declare @mx int;
   5:   
   6:  insert into @tabletemp
   7:  SELECT NAME
   8:  from sysobjects where xtype='U';
   9:   
  10:  set @mx=(select MAX(id) from @tabletemp);
  11:   
  12:  while (@i<=@mx)
  13:  begin
  14:  declare @name nvarchar(50)
  15:  select @name=name from @tabletemp where ID=@i
  16:  --truncate table @name 这样写是错误的,这样的话就需要@name是表类型变量
  17:  exec('truncate table '+@name)
  18:  exec('drop table '+@name)
  19:  set @i=@i+1
  20:  end
  21:   

也许使用游标更方便处理

使用游标

   1:  declare @cur cursor,@name nvarchar(50);
   2:  set @cur=cursor for select name from sysobjects where xtype='U'
   3:   
   4:  open @cur
   5:  fetch next from @cur into @name
   6:   
   7:  while @@FETCH_STATUS=0
   8:  begin
   9:  exec ('truncate table '+@name)
  10:  exec ('drop table '+@name)
  11:  fetch next from @cur into @name
  12:  end
  13:   
  14:  close @cur
  15:  deallocate @cur

开始才网上搜到的是使用游标的方法,试着实现了。

然后试着用其他方法实现(没想到会成功),其实就是山寨下游标的思路,感觉没游标的简单。唯一惊喜也许就是使用了表变量,之前只是看过oracle中有表变量。

成功固然重要,但也不要刻意在乎,享受下一路上意外的得到!

posted @ 2014-07-08 16:23  cnmarkao  阅读(2405)  评论(1编辑  收藏  举报