其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公开的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的存储过程,前面两行语句分别禁用约束和触发器,第三条语句才是真正地删除所有数据,接下里的语句分别还原约束和触发器,最后一条语句是显示每个表中的记录,当然这条语句也可以不要,我只是想确认一下是否清空了所有表而已。

你可以在任何数据库上运行这个存储过程,当然不要在生成数据库上运行,可别怪我没告诉你!不管怎样,还是先备份一下数据库,使用备份数据库还原,然后再运行该存储过程,呵呵,即使是一个大型数据库,也要不多长时间,你的数据库就成一个空库了,有点怕怕的感觉!

删除一个数据库中所有数据的方法相关推荐

  1. oracle 两表去除重复的数据,Oracle数据库删除两表中相同数据的方法

    在Oracle数据库中删除两表中相同数据的方法是用到in语句,本文通过实例来讲解删除两表中相同数据的方法. 软件环境: 1.Windows NT4.0+ORACLE 8.0.4. 2.Oracle安装 ...

  2. 高效删除Oracle数据库中重复数据,并保留最新一条的方法

    在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来很多的不便,那么怎么删除这些重复没有用的数据呢? 重复数据删除技术可以提供更大的备份容量,实现更长 ...

  3. shell脚本实现删除过期数据库中的数据

    一个应用系统每天都需不间断的向数据库中插入数据,而对于很早之前的数据一般都需要从数据库中清理,防止数据量无限增大,耗费存储和影响数据查询效率. 通过两个文件实现,一个文件为配置文件,一个为脚本文件. ...

  4. 把一个数据库中的数据导入到另一个数据库中的方法

    方法一: 就是先写一个连数据库连接字符串打开我们想要导出数据的数据库,把这个库中表里的数据取出来,缓存在数据集(dataset或datatable)里,然后在将他们通过另一个连接字符串添加到我们想要导 ...

  5. 如何批量删除mysql的数据库_如何快速批量删除Mysql数据库中的数据表

    一个mysql数据库中,是可以同时安装几个网站程序的,在使用中,我们只需要用不同的数据库表前缀来区分就可以了.但随着我们不断调试,那么数据 库中的表,就会一天天的多起来,如一个一个的删除就很麻烦.很辛 ...

  6. vb 修改sql数据库服务器时间格式,博途使用小结:用VB脚本向SQL数据库中写数据的方法...

    刚刚学会在博途中利用VB脚本向SQL数据库写数据,将经验总结为一篇短文供大家讨论,文中包括如何建立SQL数据库及表格,如何写脚本以及如何触发脚本. 1.安装TIA时,SQL Server Manage ...

  7. mysql把一个数据库中的数据复制到另一个数据库中的表 2个表结构相同

    1.表结构相同的表,且在同一数据库(如,table1,table2) Sql :insert into table1 select * from table2 (完全复制) insert into t ...

  8. SQLSERVER从一个Server访问另外一个Server中的数据的方法

    调用自带的sp_addlinkedserver存储过程,代码如下: EXEC sp_addlinkedserver 'ADB(要连接的server的别名)','','SQLOLEDB','要连接的se ...

  9. 删除数据库中重复数据的方法

    有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略. 1.对于第一种重复,比较容易解决,使用 ...

  10. phpStudy3——往数据库中添加数据

    前言: 前边介绍了查询数据库的方法,这里介绍下往数据库中添加数据的方法. 项目需求: 用户在前端页面输入的用户名和手机号码,点击提交后后端判断手机号码是否已经存在.如果不存在,那么插入数据库到数据库, ...

最新文章

  1. 独家|OpenCV 1.7 离散傅里叶变换
  2. 不能记账,往来帐页不能显示结转数据
  3. 分布式系统概念 | 一致性协议:拜占庭将军问题、Paxos、Raft
  4. 【机器学习】今天想跟大家聊聊SVM
  5. python调用浏览器全屏_javascript、js将页面全屏的方法(兼容多浏览器)
  6. .xhr长轮询_使用Spring 3.2的DeferredResult进行长轮询
  7. UWP 保存用户设置
  8. CODING 最佳实践:快课网研发效能提升之路 1
  9. 2017-2018-2 1723《程序设计与数据结构》每周成绩 (更新完毕)
  10. Logstash自定义grok正则匹配规则
  11. python强度公式计算_python – 黑体谱的普朗克斯公式
  12. Windows 11 新版 22598 发布!引入 4K 聚焦壁纸,优化全新任务管理器和媒体播放器...
  13. GPG使用方法总结(密钥管理,加解密文件)
  14. 逆转ACE《逆转裁判3》中文汉化版发布!
  15. silk 编解码_SILK编码语音转WAV格式
  16. 高省一个了解网络商家和买家心里的APP,它知道你想要什么
  17. Matlab中矩阵的右上角有一撇表示什么意思
  18. 使用AlphaFold2进行蛋白质结构预测
  19. javascript中call的用法总结
  20. JAVA程序设计基础05循环结构

热门文章

  1. 利用word2vec创建中文主题词典——以网络暴力关键词为例
  2. wx2540h配置教程_H3CEWP-WX2540H多业务无线控制器
  3. mac os 录屏快捷键_录屏软件怎么录制电脑游戏?录制游戏视频须知
  4. hutool工具私人学习笔记
  5. 数据结构——线段树学习笔记
  6. MCSA / Windows Server 2016 使用Hyper-V组件搭建实验环境
  7. 【语义分割专题】语义分割相关工作--SegNet
  8. 字母数字下划线常用正则表达式
  9. java教务排课系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  10. 爬取奇迹秀工具箱里面的文本和软件网盘链接