`
huangningren
  • 浏览: 43657 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

一次性删除数据库内所有表数据

阅读更多
一次性删除数据库内所有表数据
删除数据库中某个表数据的方法并不复杂,为什么还要多此一举呢?

一是这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,
二是这里使用了微软未正式公开的sp_MSForEachTable存储过程。
也许很多朋友都经历过这样的事情:要在开发数据库基础上清理一个空库,但由于对数据库结构缺乏整体了解,在删除一个表的记录时,删除不了,因为可能有外键约束,一个常见的数据库结构是一个主表,一个子表,这种情况下一般都得先删除子表记录,再删除主表记录。
说道删除数据记录,往往马上会想到的是delete和truncate语句,但在遇到在两个或多个表之间存在约束的话,这两个语句可能都会失效,而且最要命的是这两个命令都只能一次操作一个表。那么真正遇到要删除SQL Server数据库中所有记录时,该怎么办呢?有两个选择:
1.按照先后顺序逐个删除,这个方法在表非常多的情况下显得很不现实,即便是表数量不多,但约束比较多时,你还是要花费大量的时间和精力去研究其间的约束关系,然后找出先删哪个表,再删哪个表,最后又删哪个表。

2.禁用所有约束,删除所有数据,最后再启用约束,这样就不用花时间和精力去研究什么约束了,只需要编写一个简单的存储过程就可以自动完成这个任务。
从这两个选择中不难看出第二个选择是最简单有效的了,那么在使用第二个选择时,具体该怎么实施呢?
首先得编写代码循环检查所有的表,这里我推荐一个存储过程sp_MSForEachTable,因为在微软的官方文档中没有对这个存储过程有描述,很多开发人员也许都还未曾听说,所以你在互联网上搜索得到的解决办法大多很复杂,也许有的人会认为,既然没有官方文档,这个存储过程可能会不稳定,打心理上会排斥它,但事实并非如此。下面来先看一个完整的脚本:
CREATE PROCEDURE sp_DeleteAllData
AS
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
EXEC sp_MSForEachTable 'DELETE FROM ?'
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
GO
这个脚本创建了一个命名为sp_DeleteAllData的存储过程,前面两行语句分别禁用约束和触发器,第三条语句才是真正地删除所有数据,接下里的语句分别还原约束和触发器,最后一条语句是显示每个表中的记录,当然这条语句也可以不要,只是确认一下是否清空了所有表而已。
你可以在任何数据库上运行这个存储过程,当然不要在生成数据库上运行,不管怎样,还是先备份一下数据库,使用备份数据库还原,然后再运行该存储过程,数据库就成一个空库了。
分享到:
评论

相关推荐

    一次性删除数据库所有表和所有存储过程 SQL语句

    一次性删除数据库所有表和所有存储过程 SQL语句 希望可以帮助大家 我自己试过很好使用的

    数据库数据删除工具

    删除数据库数据,包括删除,清除功能,二者均删除表中的全部行,"清楚"数据删除表中的所有行,但表结构及其列、约束、索引等保持不变.新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 "删除

    删除数据库表中的父节点以及其子节点

    使用存储过程删除数据库表中具有父子关系的数据,删除父节点,则将其父节点以及子节点删除,使用数据库广度遍历

    java一次性查询处理几百万数据解决方法

    java一次性查询处理几百万数据解决方法 几百万数据是可以处理的 暂时还没试过几千万级的数据处理

    Kettle实现多表数据全量抽取

    Kettle实现多张表数据的定时删除全量抽取,删除旧shuju

    数据库安全检查表.xls

    检查项目,检测内容,说明,检查方法,检查脚本 帐号及口令安全,是否删除不必要的帐号,应删除与数据库运行、维护等工作无关的帐号,脚本,"方法一: DB2企业管理器-〉安全性-〉登陆中删除无关帐号; DB2企业管理器-〉...

    达梦数据库_SQL语言手册

    修改操作的对象也可以是元组的集合,相对于面向记录的数据库语言一次只能操作一条记录来 语言的使用简化了用户的处理,提高了应用程序的运行效率 语言简洁,方便易学 语言功能强大,格式规范,表达简洁,接近英语的语法...

    数据库灾难性恢复(数据库技术;灾难性;恢复;数据备份)

    (2)数据库数据已经存在,但是无法正常使用,提示错误,都应归属为数据修复,举例说明:SQL SERVER文件打开提示LDF文件损坏,或错误823等等。 数据库恢复实际上就是利用技术手段把不可见或不可正常运行的数据文件恢复...

    一次性清空数据表sql

    对很多表进行删除操作时,能够比较方便!!!

    《数据库原理及应用实验》课程教学大纲.docx

    该课程的教学目标是使学生能够设计数据库、数据表和数据查询优化,掌握数据库设计方法和步骤,熟练使用SQL语言在某一个数据库管理系统上进行数据库操作。 一、数据库原理及应用实验的教学目标和任务 数据库原理及...

    1数据库设计规范.doc

    设计规范 1 规范约定 遵守数据的设计规范3NF 规定 表内的每一个值都只能被表达一次。 表内的每一行都应该被唯一的标识(有唯一键)。 表内不应该存储依赖于其他键的非键信息。 2 字段规范 一行记录必须表内唯一,表...

    数据库.docx

    物理数据独立性是指数据的存储结构与存取方法改变时,对数据库的全局逻辑结构和应用程序不必作修改的一种特性,也就是说,数据库数据的存储结构与存取方法独立。 数据字典是数据库系统中各种描述信息和控制信息的...

    中国石油大学数据库原理及应用-第一次在线作业.pdf

    通过对中国石油大学数据库原理及应用第一次在线作业的分析,我们可以总结出以下几个重要的知识点: 1. 数据库的概念模式独立于具体的机器和DBMS。这意味着数据库的概念模式不受具体机器或DBMS的限制,可以在不同的...

    中国石油大学数据库原理及应用-第一次在线作业.doc

    以下是从中国石油大学数据库原理及应用-第一次在线作业中提取的相关知识点: 1. 数据库的概念模式独立于具体的机器和 DBMS。 知识点:数据库的概念模式是指数据库的逻辑结构,它独立于具体的机器和 DBMS。 2. ...

    数据库mysql开发技术

    1. SQL 语言具有数据操作功能,SQL 语言的一次查询的结果是一个表。 2. SQL 语言可以用于创建、修改和删除数据库中的表结构。 3. SQL 语言可以用于插入、更新和删除数据库中的数据。 二、数据库设计 数据库设计是...

    数据库关系数据库标准语言.pptx

    3. 面向集合的操作方式:SQL语言采用的集合操作方式,不仅操作对象、查询结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。 4. 以同一种语法结构提供两种使用方法:SQL语言既是自含式...

    Firebird数据库中文版

    我们可以在触发器中写入PSQL语句,默认值,产生异常,firebird现在支持统一触发器,即可以一个触发器中,一次性管理插入,更新,删除的操作。 扩展函数: 我们可以使用C语言,C++,DELPHI写UDF,使用UDF(用户定义...

    Access 2000数据库系统设计(PDF)---025

    1487.2.5 将字段数据类型转换为Access数据类型 1497.2.6 使用链接表管理器加载项重新链接表 1507.2.7 导入表和将数据库文件链接为表 1507.3 导入和链接电子数据表文件 1517.3.1 通过导入Excel工作表创建一个表 1517....

    旅行社数据库系统.doc

    这次课程设计主要介绍旅行社数据库的设计过程,本系统具有对相关数据的查询, 修改,删除等功能,较之于之前的相关类系统具有更简便,更实用的有点,但是由于技 术的不成熟,又具有不完整,结构不清晰等缺点。...

    数据库资料

    ——信誉值大于5的用户才能够加入会员列表 …… 完整性包括… 实体完整性域完整性引用完整性自定义完整性表操作创建数据库表 SQL Server的数据类型思考创建数据库表思考创建数据库表思考选择主键的原则创建数据库表...

Global site tag (gtag.js) - Google Analytics