您的位置:首页 > 数据库

快速删除数据库中的所有表记录

2016-02-22 15:37 288 查看
除指定数据库中所有表的记录,就是要一个空的数据库。

方法如下:

一:

SQL中delete 与 truncate table 的比较

delete 

适用于限定范围的删除,例如: delete titles 

where type = "business" 

由于 delete 的同时写事务日志,所以速度稍慢,但当误操作以及灾难发 

生时,可以进行恢复。 

没有限定范围的删除不推荐使用 delete ,因为速度实在是慢。 

truncate table 

在执行时只是简单地收回分配给一个表及它的索引的所有空间,而不是从 

表中一行一行地进行删除。这种方法本质上要比未加限定的 delete 快得 

多,特别是对一大型表进行操作时。 

truncate table 执行得快的原因是在于它不会在收回空间时记录单个的 

行删除。但在采用了 truncate table 后,在灾难发生时恢复数据库的能 

力会打折扣。除非先运行一次完整备份( dump database ) 

每当从服务器移进和移出大块的测试数据,和准备服务器迁移时, truncate 

在执行时只是简单地收回分配给一个表及它的索引的所有空间,而不是从 

表中一行一行地进行删除。这种方法本质上要比未加限定的 delete 快得 

多,特别是对一大型表进行操作时。 

truncate table 执行得快的原因是在于它不会在收回空间时记录单个的 

行删除。但在采用了 truncate table 后,在灾难发生时恢复数据库的能 

力会打折扣。除非先运行一次完整备份( dump database ) 

每当从服务器移进和移出大块的测试数据,和准备服务器迁移时, truncate 

table 是最常使用的方法。 

delete 和 truncate table 都只是删除了表中的行,并没有删除整个表的定义, 

如果想删除整个表的定义,应使用 drop table 。

注意: 对于含有 Identity Column (自动增量或减量)的表使用 

delete 删除行的时候,Identity Column 的初值并不会还原,例如:ID 是表 Title 

中的 Identity Column , Seed Value 为 1,Incerment 为 1; 表中有100 条记录, 

ID已经是100, 做 delete 删除后,增加一条记录,ID 为 101 。而如果这里使用 

truncate table, Identity Column 的初值会自动还原,即用 truncate table 删除 

后,增加一条记录,ID 为 1。

二:

1.Delete

   declare @sql  varchar(5000)
   set @sql = ''

   select @sql = @sql +'delete
from  '+[name]+';'  from sysobjects where xtype='u'

   print  @sql

   exec(@sql)

2.Turncate

   (1)    declare @sql  varchar(5000)
            set @sql = ''
            select @sql = @sql +'truncate
table '+[name]+';'  from sysobjects where xtype='u'
            print  @sql
            exec(@sql)

   (2)使用游标

           ---- 清除指定数据库各个表中所有的记录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: