`
huangningren
  • 浏览: 44531 次
  • 性别: 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语句 在进行数据库迁移或清理时,有时我们需要一次性删除数据库中的所有表和存储过程。本文将详细介绍如何通过SQL语句实现这一操作,并解释其中的关键概念和技术细节...

    删除数据库中重复的数据(只保留一条)

    2. `HAVING COUNT(Email) > 1`:筛选出那些在同一个分组内出现次数超过一次的`Email`。 3. `WHERE Email IN (...)`:最后,使用这些筛选出的`Email`来查询包含这些重复`Email`的所有记录。 #### 步骤二:删除重复...

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

    在数据库管理中,删除具有层级关系的数据记录是一项常见的操作,特别是在树形结构或者有父子关系的数据表中。本文将深入探讨如何使用存储过程来实现这一功能,特别关注如何删除父节点及其所有子节点。首先,我们需要...

    数据库数据删除工具

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

    数据库删除数据太慢

    - **原理**:为了避免一次性删除大量数据导致的系统负载过高,可以将删除操作拆分成多个小批量的操作进行。 - **实现方式**:可以通过编写SQL语句,每次只删除一部分记录,例如每次删除1000条记录,然后通过循环或...

    Kettle实现多表数据全量抽取

    例如,`Multi-tableFullDataAcquisition.kjb`很可能是定义了一个定时作业,该作业定期执行多个数据抽取任务,从源系统中获取所有表的最新数据。 - **Kettle作业(Job)**:是Kettle中用于协调多个转换或者作业的...

    删除数据库表中数据的存储过程.txt

    此过程利用了SQL Server 的系统目录视图 `sysobjects` 来遍历所有表,并逐个执行删除操作。 #### 存储过程代码详解 ##### 定义存储过程 ```sql ALTER PROC LPF_proc_DBcommon AS BEGIN ``` 这部分代码使用 `...

    Sqlite数据库里插入数据的条数上限是500

    原来一次性向数据库里插入数据的条数不能太多,上限是500条。超出会报错。 解决方案就是只好分多次插入数据库了。 您可能感兴趣的文章:SQLite教程(八):命令行工具介绍SQLite教程(十二):锁和并发控制详解...

    批量删除MySQL数据库相同前缀的数据表 v1.0

    这个工具通过指定前缀,可以一次性删除所有匹配的表,提高了工作效率,减少了人为错误的可能性。例如,如果你的数据库中有以"temp_"为前缀的临时表,你可以使用此工具来快速清除所有这些临时表。 【php源码】标签...

    数据库实验3报告(数据完整性与安全性控制).docx

    本次实验主要涉及了数据库中关于数据完整性和安全性的关键概念和操作,具体包括数据约束的设定、表的创建与删除、权限的管理等多个方面。以下是对实验内容的详细解释: 1. 数据完整性: - 非空约束:非空约束(NOT...

    设计数据库(表结构设计)

    同时要注意,同一信息只存储一次,以减少错误的可能性,并提高数据一致性。 确定所需字段是设计中的重要一步。每个字段都应直接与表的主题相关,且不应包含可以通过其他字段推导或计算得出的信息。确保收集所有必要...

    易语言字词一次性写到数据库

    "易语言字词一次性写到数据库"的标题和描述涉及到的是使用易语言进行数据库编程,特别是批量写入数据的操作,以及可能涉及的数据类型转换,如十六进制到十进制。 易语言是一种基于汉语语法和概念的编程语言,它旨在...

    ArcGIS数据库删除工具

    这个功能允许用户一次性清除所有图层的数据,但不会移除图层本身。这意味着图层结构和定义保持不变,仅数据被清空。这对于需要重新加载新数据或进行数据更新的场景非常有用,避免了重复创建和设置图层的繁琐步骤。 ...

    数据库安全检查表.xls

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

    Excel表数据导入到SQL数据库中

    4. 批量处理:对于大量数据,避免一次性加载可能导致性能问题。可以分批处理,比如每1000行写入一次。 5. 错误处理和日志记录:在导入过程中,可能会遇到数据不匹配、格式错误等问题,应设置合适的异常处理机制,并...

    速达数据库表结构解析

    在深入研究速达数据库表结构时,还需要注意数据库的规范化程度,即是否遵循了第一范式(1NF)、第二范式(2NF)和第三范式(3NF)等设计原则,这将影响到数据的一致性、完整性和查询效率。同时,数据库的索引设置也...

    简单理解数据库临时表

    - **全局临时表**(Global Temporary Table, GGT):不同于会话级临时表,全局临时表可以在整个数据库实例内共享,并且可以在提交或回滚事务后保留数据,直到下一次插入新数据覆盖为止。 #### 四、临时表的创建与...

    java判断数据库表是否存在

    通过JDBC,开发者可以编写一次代码,就可以在不同的数据库管理系统(DBMS)上运行,极大地提高了代码的可移植性和可重用性。 #### 2. DatabaseMetaData接口 `DatabaseMetaData`接口提供了关于数据库的元数据信息,...

    MySQL 数据库误删除后的数据恢复操作说明(详细)

    1. **定位binlog文件中的增量数据**:利用完全备份的SQL文件中记录的`CHANGEMASTER`语句以及binlog文件的位置点信息,找到自上一次完全备份以来的所有更改。 2. **导出binlog文件为SQL格式**:使用`mysqlbinlog`...

Global site tag (gtag.js) - Google Analytics