自动生成清空数据库的SQL语句
来源:岁月联盟
时间: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]
*/