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

来源:岁月联盟 编辑:zhuzhu 时间:2008-09-04

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

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

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

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

 

Declare@Sqlnvarchar(Max) 
  ;WithT1 
  As 
  ( 
  selectConvert(int,0)asLevelNo,fkeyid,rkeyid 
  Fromsys.sysforeignkeysa 
  whereNotexists(select1Fromsys.sysforeignkeyswhererkeyid=a.fkeyid) 
  unionAll 
  selectb.LevelNo+1,a.fkeyid,a.rkeyid 
  Fromsys.sysforeignkeysa,T1b 
  wherea.fkeyid=b.rkeyid 
  ) 
  ,T2 
  As 
  ( 
  selectLevelNo,id=fkeyidFromT1 
  unionAll 
  selectLevelNo+1,rkeyidFromT1 
  ) 
  ,T3 
  As 
  ( 
  selecta.name,LevelNo=Max(Isnull(b.LevelNo,0)),c.is_identity 
  Fromsys.sysobjectsa 
  LeftOuterjoinT2bOna.id=b.id 
  LeftOuterjoinsys.identity_columnscOnc.object_id=a.id 
  wherea.xtype=’U’Anda.name<>’sysdiagrams’ 
  GroupBya.name,c.is_identity 
  ) 
  select@Sql=Isnull(@Sql,’Use’+Quotename(Db_name()))+char(13)+char(10)+ 
  CaseWhenLevelNo=0Then’truncateTable’+Quotename(name) 
  Whenis_identity=1Then’deleteFrom’+Quotename(name)+’DBCCCheckident(’’’+Quotename(name)+’’’,Reseed,0)’ 
  Else’deleteFrom’+Quotename(name)End 
  FromT3 
  OrderByLevelNo 
  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]
  */