用户注册  登录  购物车  我的订单  帮助中心  客户反馈

客服热线:(0592)8636830
网站首页 金蝶 速达 晋新软件 管家婆 金万维 模板建站 新闻资讯 报价单

请选择分类: 金蝶KIS  3000系列  5000系列  7000系列  财务系列  行业软件  其它  晋业服装  晋业通系列  晋业连锁超市  

2013-11-18 星期一 高级/组合搜索
给我发消息

技术支持1

给我发消息

技术支持2

 隐藏
所有新闻
站内新闻
站内新闻
解决方案
典型客户
行业新闻
技术支持
技术文章(软件)
技术文章(网站)
其它
财务知识
在SQL Server中快速删除重复记录

作者:  转载自:  发布日期:2009-7-31

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

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

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

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

A=dU, p2+\o~H( v5

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

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

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

D*REx'x-3j?R|?pn

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

  第二板斧——为该表加上索引,并使其忽略重复的值YR Ec{JTK@ hLa
  方法是在企业管理器中找到上面建立的临时表Products _temp,单击鼠标右键,选择所有任务,选择管理索引,选择新建。然后设置索引选项。

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

DHCy8M/[9ta|X1{VpHu

insert into Products_temp Select * from Products

  此时SQL Server会返回如下提示:5y y ??fWCXJ; R?`Ep
?Z -S zA0+�'KPJ6zP
  服务器: 消息 3604,级别 16,状态 1,行 1;1@s|qyR AI?I 1v/
I'7G bQ FHQDo/
  已忽略重复的键。)3[/ ' mU0{9}4t
  n*y'oUAK@) &H
  它表明在产品信息临时表Products_temp中不会有重复的行出现。dux0$[SI*6&};l
m'Vf7;gvf9l�72J ?}
  第四板斧——将新的数据导入原表ZPBb6[ac=J(tyh~�
  将原产品信息表Products清空,并将临时表Products_temp中数据导入,最后删除临时表Products_temp。

#upj.pVGD/=HJ(X

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

  这样就完成了对表中重复记录的删除。无论表有多大,它的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的。F2cYU]"NG@DMv;
7`]q)\ %�"Ked| 
  小提示:上述方法中删除重复记录取决于创建唯一索引时选择的字段,在实际的操作过程中读者务必首先确认创建的唯一索引字段是否正确,以免将有用的数据删除。
B]:%`U~!5{=qA=I
[版权归原作者及coolcxm共同拥有,转载请注明出处]


常见问题 | 关于我们 | 付款方式 | 送货方式 | 联系我们 |


Copyright © 2007 www.375168.com. All Rights Reserved.版权所有:商启贸易网络购物中心|厦门速达软件|厦门速达软件独立运营商|速达软件经销商|管理软件|财务软件|ERP|厦门网站建设
客户服务热线:(0592)8636830
客户服务邮箱:cxm76@163.com 传真:(0592)2022582
公司详细地址:厦门市育青路31号902室  邮编:361000
闽ICP备07042975号