有时候需要把数据库中表记录都删除掉,为了方便我们有必要制作一个清空数据库的脚本,
这里主要是考虑存在外键约束和标识列问题。
存在外键关系时候就要查询出,先要删除哪一张表,后要删除哪一张表,
当存在标识列的时候,就要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] */