您当前位置:主页 > 资讯攻略 >
来源:未知
2020-01-08 10:34:21 浏览: 分类:资讯攻略

最简单删除SQL Server中所有数据的方法

实际上,删除数据库中的数据的方法并不复杂,为什么我要进行不必要的工作呢?首先,我这里介绍的是删除数据库中的所有数据,因为数据之间可能会形成相互制约的关系,删除操作可能会陷入死循环。第二,这里使用了微软官方没有公开的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 Server

优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。

本文链接:http://www.123down.cn/gonglue/227181.html

攻略资讯
安卓软件