自动生成清空数据库的SQL语句

日期: 2008-07-30 作者:OK_008 来源:TechTarget中国 英文

  我们要制作一个清空数据库的脚本,把数据库中表记录都删除掉。这里主要是考虑存在外键约束和标识列问题。


  有时候需要把数据库中表记录都删除掉,为了方便我们有必要制作一个清空数据库的脚本,


  这里主要是考虑存在外键约束和标识列问题。


  存在外键关系时候就要查询出,先要删除哪一张表,后要删除哪一张表,


  当存在标识列的时候,就要DBCC Checkident 来重新设置标识值。







Declare @Sql nvarchar(Max) 
  ;With T1 
  As 
  ( 
  select Convert(int,0) as LevelNo,fkeyid,rkeyid 
  From sys.sysforeignkeys a 
  where Not exists(select 1 From sys.sysforeignkeys where rkeyid=a.fkeyid) 
  union All 
  select b.LevelNo+1,a.fkeyid,a.rkeyid 
  From sys.sysforeignkeys a,T1 b 
  where a.fkeyid=b.rkeyid 
  ) 
  ,T2 
  As 
  ( 
  select LevelNo,id=fkeyid From T1 
  union All 
  select LevelNo+1,rkeyid From T1 
  ) 
  ,T3 
  As 
  ( 
  select a.name,LevelNo=Max(Isnull(b.LevelNo,0)),c.is_identity 
  From sys.sysobjects a 
  Left Outer join T2 b On a.id=b.id 
  Left Outer join sys.identity_columns c On c.object_id=a.id 
  where a.xtype=’U’ And a.name<>’sysdiagrams’ 
  Group By a.name,c.is_identity 
  ) 
  select @Sql=Isnull(@Sql,’Use’+Quotename(Db_name()))+char(13)+char(10)+ 
  Case When LevelNo=0 Then ’truncate Table ’+Quotename(name) 
  When is_identity=1 Then ’delete From ’+Quotename(name)+’ DBCC Checkident (’’’+Quotename(name)+’’’,Reseed,0)’ 
  Else ’delete From ’+Quotename(name) End 
  From T3 
  Order By LevelNo 
  Print @Sql 
  生成示例 
  e.g: 

  /*


  Use[Test]


  truncate Table [os]


  truncate Table [T2]


  truncate Table [t4]


  truncate Table [t5]


  truncate Table [test]


  delete From [T3]


  delete From [T1]


  */

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

OK_008
OK_008

相关推荐