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

推荐订阅源

罗磊的独立博客
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
MyScale Blog
MyScale Blog
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Blog of Author Tim Ferriss
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
C
Check Point Blog
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
博客园 - 聂微东
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG

博客园 - 世之云枭

网站技术分享 网页内容抓取 推广:湖南省德谦新材料有限公司 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]
*/