我们在开发程序中经常会遇到垃圾数据,这包括很让人头痛的重复数据(重复记录,部分重复记录)!
一般实现删除重复记录可以写一段代码,用游标遍历,从而删除记录,但如果记录条数比较多,用游标的方法删除需要执行非常长的时间,我试过,数据量不是很多,但是效率很低,结果不是很理想!
现在给大家推荐简便的方法:
完全重复的记录的删除
所有字段都重复的情况,
select distinct * into #tmp from tablename drop table tablename select * into tablename from #tmp drop table # tmp
[b]关键字段重复的记录[/b]
是部分关键字段重复的记录,其他字段不重复(或者可以说忽略对于程序不需要提取的信息:部分重复的字段)。
现在创建一个演示表:
/****** @author:wujincheng 对象: Table [dbo].[T_CASE_test] 脚本日期: 01/28/2010 17:05:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[T_Test](
[BUSICASEID] [bigint] NOT NULL,
[BUSIOPERATE] [smallint] NOT NULL,
[BUSIOPERATEOPINION] [varchar](max) COLLATE Chinese_PRC_CI_AS NULL,
[BUSIOPERATEDATE] [datetime] NOT NULL
) ON [PRIMARY]
[code="sql"]GO
SET ANSI_PADDING OFF
看下表中重复的数据:
可以看出1730和1733的记录已经重复了
那么为了解决这一问题战略四步走:
战略一:给该表一个重生,创建表,拷贝该表结构
select * into T_Test_Demo from dbo.T_Test where 1<>1
战略二:给该表一个升华
建立索引
丢包袱
战略三:给该表一个飞跃
拷贝不重复的数据:
insert into dbo.T_Test_Demo select * from dbo.T_Test
会有提示:已忽略重复的键。
(16196 行受影响)
战略四:妙手回春
删除原来的数据,重新导入
delete dbo.T_Test
insert into dbo.T_Test select * from dbo.T_Test_Demo
其实表中重复的部分数据,同样的原理。
在建立索引时
我们再看一些数据
1730的办件出现三个重复的新增办件信息,有两个修改办件信息和一个办结信息...
根据程序的需要就不能笼统的冠以之垃圾数据,
需要提取1730的新增办件信息,和一个修改的办件信息以及一个办结信息,那么原理同上,需要多建立一个索引,修改后即可。呵呵,时间不早了....
似乎麻烦了,看一个文档,很好解决
http://wenku.baidu.com/view/82b09b2f0066f5335a81216d.html
分享到:
相关推荐
有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
删除重复记录 删除数据表中的重复记录,包括MySQL、SQL Server、Oracle等
本文介绍了用四种方法教你如何用SQL语句删除重复记录。
筛选重复行,删除重复行 使用游标来实现。 delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid)...
查询SQL重复记录的几种方法总结,删除SQL重复记录查
SQLServer考试题及答案 选择题: 1、在MS SQL Server中,用来显示数据库信息的系统存储过程是( ) A sp_ dbhelp B sp_ db C sp_ help D sp_ helpdb 2、SQL语言中,删除一个表的命令是( ) A DELETE B DROP C ...
注:此处“重复”非完全重复,意为某字段数据重复 HZT表结构 ID int Title nvarchar(50) AddDate datetime 数据 一. 查找重复记录 1. 查找全部重复记录 Select * From 表 Where 重复字段 In (Select ... 删除重复记录
介绍就不多说了,下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整...
---看看删除后还有没有重复记录:0 select gs903,gs1002,count(*) as count from w01 group by gs903,gs1002 having count(*)>1 order by count desc ---删除后的数据和记录数:7-2=5 select * from w01 select ...
这是SQL Server2000测试题。 1 有订单表,需要实现它的编号,格式如下:200211030001……200222039999等 Replace(substring(convert(varchar(20),getdate(),120),1,10),’-’,’ ‘)+max(订单号)+1 2 有表T1,T2,...
主要介绍了Sql Server里删除数据表中重复记录的例子,本文给出了3种操作方法,需要的朋友可以参考下
乐山师范学院数据库编程期末答疑,卷子讲解,SQL server相关 如下是一个简化的员工考勤应用E-R图,请在SQL Server中创建名为YQKG的数据库,包括两个数据文件,一个日志文件,文件名按SQL Server对象命名规范定义,...
代码如下: delect table where id not in ( select max(id) from table group by col1,col2,col3… ) group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。...
《Microsoft SQL Server 2008技术内幕:T-SQL查询》全面深入地介绍了Microsoft SQL Server 2008中高级T-SQL查询、性能优化等方面的内容,以及SQL Server 2008新增加的一些特性。主要内容包括SQL的基础理论、查询优化...
在Database中可能由于某种原因如用户输入,导入数据失败等 导致了重复记录. 如果你没有用主键,约束,或来其它机制实现数据完整性,那最后总是重复记录在你的数据库中.
比如创建、备份、删除数据库的SQL脚本,这些当然是比较简了,还有复杂点的像备份、创建索引、复合SQL语句、创建视图、高级运算查询、EXCEPT 运算符、INTERSECT 运算符、使用外连接、SQL分组、复制或拷贝表、在线视图...
《Microsoft SQL Server 2008技术内幕:T-SQL查询》全面深入地介绍了Microsoft SQL Server 2008中高级T-SQL查询、性能优化等方面的内容,以及SQL Server 2008新增加的一些特性。主要内容包括SQL的基础理论、查询优化...
如下sql,找出重复的记录,和重复记录中ID值最小的记录(表中ID为自增长) select MIN(ID) as id, StructSN ,Date,UserID,StarCount,COUNT(StructSN) as c from T_Dor_StructStar where Date >= '20160919' group ...
主要介绍了SQL语句实现删除重复记录并只保留一条,本文直接给出实现代码,并给出多种查询重复记录的方法,需要的朋友可以参考下