惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
量子位
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
Google DeepMind News
Google DeepMind News
小众软件
小众软件
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
雷峰网
雷峰网
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - 世之云枭

网站技术分享 网页内容抓取 推广:湖南省德谦新材料有限公司 Http://www.paint123.cn CentOS MySQL安装和编译【转帖】 缓存容器类的实现(C#) ReadFreeCache 设计一个高效的网络服务器用户管理类 修改自增字段 C++、Java与C#的命名规范总结 (转) VTL-vm模板的变量用法 - 世之云枭 - 博客园 http://www.cnblogs.com/onlytiancai/archive/2009/04/11/1433456.html 数据库中与c#中的数据类型对照 - 世之云枭 - 博客园 SessionID的正确说明 临时文件 细节决定成败 NVelocity 主从表 自动生成Insert数据的SQL脚本 分页存储过程 常用的获取最大值
自动生成清空数据库的SQL语句
世之云枭 · 2008-07-10 · via 博客园 - 世之云枭

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