我们要制作一个清空数据库的脚本,把数据库中表记录都删除掉。这里主要是考虑存在外键约束和标识列问题。
有时候需要把数据库中表记录都删除掉,为了方便我们有必要制作一个清空数据库的脚本,
这里主要是考虑存在外键约束和标识列问题。
存在外键关系时候就要查询出,先要删除哪一张表,后要删除哪一张表,
当存在标识列的时候,就要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中国
作者
相关推荐
-
OpenWorld18大会:Ellison宣布数据库的搜寻和破坏任务
在旧金山举行的甲骨文OpenWorld 2018大会中,甲骨文首席技术官(CTO)兼创始人Larry Elli […]
-
ObjectRocket着力发展Azure MongoDB服务
MongoDB吸引了微软公司的注意力,微软公司计划针对运行于该公司2017年发布的Azure Cosmos D […]
-
数据库和数据仓库的区别在哪儿?
目前,大部分数据仓库还是用数据库进行管理。数据库是整个数据仓库环境的核心,是数据存放的地方和提供对数据检索的支持。
-
如何使用服务来平衡Oracle RAC 数据库工作负载
为不同的应用程序配置不同的服务,DBA可以更有效地平衡集群工作负载,在Oracle RAC数据库环境下实现更好的应用程序性能。