首页 > 代码库 > mssql 删除数据库中所有的表

mssql 删除数据库中所有的表

<pre name="code" class="html">针对于此操作大家可以去先去了解一下系统表sysobjects(有上篇博客有写) ,和drop ,truncate,delete的区别。
------------删除所有表的外键约束(删除表结构(drop)的时候,删除数据(truncate;delete )的时候不用)-------
DECLARE c1 cursor for
select 'alter table ['+ object_name(parent_obj) + '] drop constraint ['+name+']; '
from sysobjects
where xtype = 'F'
open c1--创建游标
declare @c1 varchar(8000)
fetch next from c1 into @c1
while(@@fetch_status=0)
begin
exec(@c1)
fetch next from c1 into @c1
end
close c1
deallocate c1
 
--------------------删除所有表--------------------------
 
use 数据库名
GO
declare @sql varchar(8000)
while (select count(*) from sysobjects where type='U')>0
begin
SELECT @sql='drop table ' + name
FROM sysobjects
WHERE (type = 'U')
ORDER BY 'drop table ' + name
exec(@sql)
end

<pre name="code" class="html">    1. truncate 和 delete 只删除数据不删除表的结构(定义)    drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为 invalid (无效)状态。   

    2. truncate 删除所有记录,重置表(最明显的是自动id归零),删除数据时不会备份;delete 删除记录,自动id继续delect删除时会有备份 是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对 truncate 使用ROLLBACK命令。 

    3.小心使用 drop 和 truncate,用delete并且带上where条件,当然客户那大多都会有备份三者其实没有优先级,适当的时候用适当的方法
 
  # 想删除部分数据行用 delete,注意带上where子句.
  # 想删除表,当然用 drop    
  # 想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。    
  # 如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。


mssql 删除数据库中所有的表