Sql Server中清空所有数据表中的记录

清空所有数据表中的记录:

代码如下:exec sp_msforeachtable  @Command1 ='truncate table ?'
删除所有数据表:

代码如下:exec sp_msforeachtable 'delete   N''?'''
清空SQL Server数据库中所有表数据的方法(有约束的情况)

其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公开的sp_MSForEachTable存储过程。

  也许很多读者朋友都经历过这样的事情:要在开发数据库基础上清理一个空库,但由于对数据库结构缺乏整体了解,在删除一个表的记录时,删除不了,因为可能有外键约束,一个常见的数据库结构是一个主表,一个子表,这种情况下一般都得先删除子表记录,再删除主表记录。

  说道删除数据记录,往往马上会想到的是delete和truncate语句,但在遇到在两个或多个表之间存在约束的话,这两个语句可能都会失效,而且最要命的是这两个命令都只能一次操作一个表。那么真正遇到要删除SQL Server数据库中所有记录时,该怎么办呢?有两个选择:

  1.按照先后顺序逐个删除,这个方法在表非常多的情况下显得很不现实,即便是表数量不多,但约束比较多时,你还是要花费大量的时间和精力去研究其间的约束关系,然后找出先删哪个表,再删哪个表,最后又删哪个表。

  2.禁用所有约束,删除所有数据,最后再启用约束,这样就不用花时间和精力去研究什么约束了,只需要编写一个简单的存储过程就可以自动完成这个任务。

代码如下:
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_MSForEachTable,因为在微软的官方文档中没有对这个存储过程有描述,很多开发人员也许都还未曾听说,所以你在互联网上搜索得到的解决办法大多很复杂,也许有的人会认为,既然没有官方文档,这个存储过程可能会不稳定,打心理上会排斥它,但事实并非如此。下面来先看一个完整的脚本:

  这个脚本创建了一个命名为sp_DeleteAllData的存储过程,前面两行语句分别禁用约束和触发器,第三条语句才是真正地删除所有数据,接下里的语句分别还原约束和触发器,最后一条语句是显示每个表中的记录,当然这条语句也可以不要,我只是想确认一下是否清空了所有表而已。

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

第三种方法:TRUNCATE TABLE

在sql server数据库中快速删除记录,清空表若要删除表中的所有行,则 TRUNCATE TABLE 语句是一种快速、无日志记录的方法。TRUNCATE TABLE 与不含有 WHERE 子句的 DELETE 语句在功能上相同。但是,TRUNCATE TABLE 速度更快,并且使用更少的系统资源和事务日志资源。

与 DELETE 语句相比,TRUNCATE TABLE 具有以下优点:

所用的事务日志空间较少。

DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放。

使用的锁通常较少。

当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。TRUNCATE TABLE 始终锁定表和页,而不是锁定各行。

如无例外,在表中不会留有任何页。

执行 DELETE 语句后,表仍会包含空页。例如,必须至少使用一个排他 (LCK_M_X) 表锁,才能释放堆中的空表。如果执行删除操作时没有使用表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下一些空页,尽管这些页会通过后台清除进程迅速释放。

与 DELETE 语句相同,使用 TRUNCATE TABLE 清空的表的定义与其索引和其他关联对象一起保留在数据库中。

Sql Server中清空所有数据表中的记录相关推荐

  1. 如何将Excel数据导入到MS SQL Server已定义的数据表中

    1. 前提:已经在SQL Server中定义了所要导入数据的表(如stock,salvaging和out_stock三张表)的结构. 2. 如图,选择要导入数据的数据库(例如dlqx数据库),右键-& ...

  2. SQL Server 与 Excel,Access 数据表的导入导出(注:参照博园.NET大观)

    我们知道在Sql Server 中 集成了数据的导入导出这么一个工具,那用Sql 脚本怎么轻松操作 Access 和 Excel 中的数据呢,接下来我们看一看: 一. SQL SERVER 和EXCE ...

  3. SQL Server 创建和管理数据表

    一.已有数据库,其名称为userdb 1.在userdb数据库中按照要求创建以下数据表: 创建数据库userdb CREATE DATABASE userdb ON PRIMARY (NAME=use ...

  4. SQL Server 使用DELETE 语句删除表中的记录两种情况(删除符合条件的记录,删除所有记录)

    1 使用详解 DELETE 语句 说明:用于删除表中的记录. 语法: DELETE FROM table_name [WHERE some_column operator some_value]; 2 ...

  5. php怎么更新多条数据,PHP中批量更新数据表中多条记录

    class test { /** * 创建像这样的查询: "IN('a','b')"; * * @author wengxianhu * @created to 2013-05-2 ...

  6. oracle数据库定时同步工具,[每天自动同步一个数据库表的数据]sql server定时同步oracle数据表...

    –*********************************************************************** –Copyright (c) 2003 Microso ...

  7. SQL Server 备份还原单个数据表

    备份导出数据 Master..xp_CmdShell 'bcp 库名..表名 out D:\filename -c -S servername -U sa -P password' Master..x ...

  8. SQL server 数据库 修改学生数据表

    use EMIS go alter table t_student add phone varchar(12) --增加字段phone goalter table t_student alter co ...

  9. lmbs PHP,PHP 清空 MySql 指定数据表中的所有数据

    PHP 清空 MySql 指定数据表中的所有数据 PHP 清空 MySql 指定数据表中的所有数据,在烈火小编在网上闲逛时,这是某技术博客的一篇文章,说是文章,并没有文字,只有代码,经过测试可以使用, ...

  10. 17.2.3 通过查看triggers数据表中的数据查看触发器的信息

    17.2.3 通过查看triggers数据表中的数据查看触发器的信息 在MySQL中,会将触发器的信息存储到information_schema数据库中的triggers数据表中.可以通过查看info ...

最新文章

  1. Swift中NSData与NSDictionary之间的相互转换
  2. 上架相关——appstore 更新app版本
  3. 7款免费原型设计工具
  4. 资深架构专家聊架构之道:灵活、稳定、高可用15点精要
  5. 软件工程概论之登录页面
  6. C# for循环①护栏长度 ②广场砖面积 ③判断闰年平年
  7. stm32串口_【单片机】STM32串口基本配置
  8. .NET/C# 优化心得
  9. 优化设计二维鲍威尔c语言,潘隆武-B0310524-机制09-5-鲍威尔法.doc
  10. 游戏开发中的那点英语
  11. 银联在线 网关支付 (JAVA版)
  12. Linux学习笔记-B站韩顺平
  13. 宏晶新推出的STC16单片机,有哪些方面的不足?
  14. 搭建sspanel 教程三(后端教程)
  15. ubuntu16.04安装搜狗拼音输入法
  16. python学习2——if 条件检查
  17. java大转盘抽奖概率算法_幸运大转盘抽奖 抽奖算法 程序实现逻辑
  18. 如何完整保存离线网页
  19. c语言:(指针)实现输入三个整数从小到大排序
  20. IBM类脑超算平台TrueNorth芯片将于本周送往劳伦斯利弗莫尔

热门文章

  1. 我的小站:诗词在线 http://www.chinapoesy.com 欢迎大家测试速度。特别是网通的。...
  2. Spring Boot 面试,一个问题就干趴下了!(下)
  3. 有关科学计算方面的python解决
  4. 38 | 测试数据的“银弹”- 统一测试数据平台(下)
  5. 用css实现图片翻转
  6. [C/C++] 结构体存储问题
  7. MVC 异常处理机制
  8. Coding Interview Guide -- 判断二叉树是否为平衡二叉树
  9. 处理手机上点击链接出现的蓝色边框
  10. 利用ant和dedex解析classes.dex