SQL Server如何实现快速删除重复记录?

时间:2011-05-03 11:18:00 

如果一张表的数据达到上百万条,用游标的方法来删除简直是个噩梦,因为它会执行相当长的一段时间……

    开发人员的噩梦——删除重复记录

想必每一位开发人员都有过类似的经历,在对数据库进行查询或统计的时候不时地会碰到由于表中存在重复的记录而导致查询和统计结果不准确。解决该问题的办法就是将这些重复的记录删除,只保留其中的一条。

SQL Server中除了对拥有十几条记录的表进行人工删除外,实现删除重复记录一般都是写一段代码,用游标的方法一行一行检查,删除重复的记录。因为这种方法需要对整个表进行遍历,所以对于表中的记录数不是很大的时候还是可行的,如果一张表的数据达到上百万条,用游标的方法来删除简直是个噩梦,因为它会执行相当长的一段时间。

四板斧——轻松消除重复记录

殊不知在SQL Server中有一种更为简单的方法,它不需要用游标,只要写一句简单插入语句就能实现删除重复记录的功能。为了能清楚地表述,我们首先假设存在一个产品信息表Products,其表结构如下:




  CREATE TABLE Products ( 
  ProductID int, 
  ProductName nvarchar (40), 
  Unit char(2), 
  UnitPrice money 
  ) 

表中的数据如图1:


  图表

图1中可以看出,产品Chang和Tofu的记录在产品信息表中存在重复。现在要删除这些重复的记录,只保留其中的一条。步骤如下:

  第一板斧——建立一张具有相同结构的临时表




  CREATE TABLE Products_temp ( 
  ProductID int, 
  ProductName nvarchar (40), 
  Unit char(2), 
  UnitPrice money 
  ) 

第二板斧——为该表加上索引,并使其忽略重复的值

方法是在企业管理器中找到上面建立的临时表Products _temp,单击鼠标右键,选择所有任务,选择管理索引,选择新建。如图2所示。

按照图2中圈出来的地方设置索引选项。 

  图2

第三板斧——拷贝产品信息到临时表

  insert into Products_temp Select * from Products

此时SQL Server会返回如下提示:

服务器: 消息 3604,级别 16,状态 1,行 1

已忽略重复的键。

它表明在产品信息临时表Products_temp中不会有重复的行出现。

第四板斧——将新的数据导入原表

将原产品信息表Products清空,并将临时表Products_temp中数据导入,最后删除临时表Products_temp。




  delete Products 
  insert into Products select * from Products_temp 
  drop table Products_temp 

这样就完成了对表中重复记录的删除。无论表有多大,它的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的。

小提示:上述方法中删除重复记录取决于创建唯一索引时选择的字段,在实际的操作过程中读者务必首先确认创建的唯一索引字段是否正确,以免将有用的数据删除。

标签:SQLserver,2000,删除,重复记录
0
投稿

猜你喜欢

  • 基于numpy中的expand_dims函数用法

    2023-02-25 23:24:20
  • 15款Python编辑器的优缺点,别再问我“选什么编辑器”啦

    2021-10-06 12:37:55
  • MySQL 查询某个字段不重复的所有记录

    2024-01-25 09:22:58
  • 深入理解python try异常处理机制

    2023-01-06 00:51:35
  • mysql 8.0.12 安装图文教程

    2024-01-28 05:19:04
  • Python对象与json数据的转换问题实例详解

    2023-10-27 22:08:39
  • js实现关闭网页出现是否离开提示

    2024-05-09 10:36:13
  • 教你利用python如何读取txt中的数据

    2023-04-03 14:52:36
  • Perl哈希表用法解析

    2023-08-23 19:12:48
  • Python Opencv轮廓常用操作代码实例解析

    2023-01-03 08:46:59
  • python实现对象列表根据某个属性排序的方法详解

    2022-12-24 23:47:43
  • 用virtualenv建立多个Python独立虚拟开发环境

    2023-10-28 06:24:07
  • 部署Python的框架下的web app的详细教程

    2022-06-03 08:20:57
  • 请给PNG8一个机会:对png8的误解

    2009-09-21 10:45:00
  • JS实现的字符串数组去重功能小结

    2024-04-17 10:25:52
  • python迭代器,生成器详解

    2023-04-12 05:33:34
  • PHP完全二叉树定义与实现方法示例

    2023-07-04 10:49:10
  • Java连接Oracle数据库实例解析

    2024-01-17 06:31:04
  • 从Web查询数据库之PHP与MySQL篇

    2023-07-18 11:04:05
  • vue实现全屏滚动效果(非fullpage.js)

    2024-05-28 15:46:00
  • asp之家 网络编程 m.aspxhome.com