仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1476|回复: 7
打印 上一主题 下一主题

[学习教程] 公布删除SQL Server中一切数据的办法

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 20:10:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
关于这个理由我把它放在最后一位。在很多业界专家中有一个相当一致的观点:MySQL不能很好的扩展。关于这点可能有很大的分歧,争论的焦点主要集中于水平可扩展性和垂直可扩展性上。MySQL则更倾向于垂直可扩展性。实在删除数据库中数据的办法其实不庞大,为何我还要画蛇添足呢,一是我这里先容的是删除数据库的一切数据,由于数据之间大概构成互相束缚干系,删除操纵大概堕入逝世轮回。  实在删除数据库中数据的办法其实不庞大,为何我还要画蛇添足呢,一是我这里先容的是删除数据库的一切数据,由于数据之间大概构成互相束缚干系,删除操纵大概堕入逝世轮回,二是这里利用了微软未正式公然的sp_MSForEachTable存储历程

  大概良多读者伴侣都履历过如许的事变:要在开辟数据库基本上清算一个空库,但因为对数据库布局缺少全体懂得,在删除一个表的纪录时,删除不了,由于大概有外键束缚,一个罕见的数据库布局是一个主表,一个子表,这类情形下一样平常都得先删除子表纪录,再删除主表纪录。

  说道删除数据纪录,常常即刻会想到的是delete和truncate语句,但在碰到在两个或多个表之间存在束缚的话,这两个语句大概城市生效,并且最要命的是这两个命令都只能一次操纵一个表。那末真正碰到要删除SQLServer数据库中一切纪录时,该怎样办呢?有两个选择:

  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的存储历程,后面两行语句分离禁用束缚和触发器,第三条语句才是真正地删除一切数据,接下里的语句分离复原束缚和触发器,最初一条语句是显现每一个表中的纪录,固然这条语句也能够不要,我只是想确认一下是不是清空了一切表罢了。

  你能够在任何数据库上运转这个存储历程,固然不要在天生数据库上运转,可别怪我没告知你!不论如何,仍是先备份一下数据库,利用备份数据库复原,然后再运转该存储历程,呵呵,即便是一个年夜型数据库,也要未几长工夫,你的数据库就成一个空库了,有点怕怕的感到!
DBaaS系统其实具有更大的市场机遇:像其他云服务一样,DBaaS意味着更短的销售周期,更少的启动费用,持续不断的收入,也意味着比之前更多的客户。
第二个灵魂 该用户已被删除
沙发
发表于 2015-1-25 08:41:07 | 只看该作者
总感觉自己还是不会SQL
小魔女 该用户已被删除
板凳
发表于 2015-2-2 19:05:04 | 只看该作者
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
透明 该用户已被删除
地板
发表于 2015-2-8 04:37:00 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
飘灵儿 该用户已被删除
5#
发表于 2015-2-24 14:53:37 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
再现理想 该用户已被删除
6#
发表于 2015-3-7 12:28:47 | 只看该作者
从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。
7#
发表于 2015-3-15 06:29:01 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
因胸联盟 该用户已被删除
8#
发表于 2015-3-21 20:44:19 | 只看该作者
备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 01:09

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表