`

SQL Server中删除重复数据的几个方法

阅读更多

     数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置……

 

     方法一

 

declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0
 

 

     方法二

      有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都 重复可以忽略。

 

      1、对于第一种重复,比较容易解决,使用

 

select distinct * from tableName

 

       就可以得到无重复记录的结果集。

       如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp

       发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

 

       2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下

 

          假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

 

select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)

          最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    SQL Server删除重复数据的几个方法

    SQL Server删除重复数据的几个方法SQL Server删除重复数据的几个方法

    Microsoft SQL Server 2005 Express Edition SP3

    对于 SQL Server 2000 中的 Microsoft 数据访问组件 (MDAC) 客户端,请使用 SQL Server 2000 客户端网络实用工具。对于 SQL 本机客户端,请使用“添加或删除程序”卸载 SQL 本机客户端。在群集中,请卸载所有节点中...

    Sqlserver2000经典脚本

    介绍就不多说了,下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整...

    sqlserver自定义函数

    ---删除重复的数据:2行 delete from w01 where id not in (select max(id) from w01 group by gs903,gs1002) ---看看删除后还有没有重复记录:0 select gs903,gs1002,count(*) as count from w01 group by gs903,...

    收集整理的SQL Server自定义函数

    16.多个数据项的字符串取指定位置字符 28 17.中缀算术转后缀算术表达式并计算的函数 29 18.人民币小写金额转大写 32 19.向左填充指定字符串 36 20.将整型数字转换为大写汉字 39 21.检查给定串是否存在于由区间及点集...

    SQL SERVER 删除重复内容行

    对于重复行删除的问题,网上很难找到合适的答案,问问题的不少,但在搜索引擎中草草地看了一下前面的记录都没有解决方案。 其实这个问题可以很华丽的解决。 1、如果这张表没有主键(或者相同的行并没有不相同的内容列...

    经典SQL脚本大全

    │ │ 5.1.1 SET IDENTITY_INSERT 中的几个问题.sql │ │ 5.1.1 修改标识值的示例.sql │ │ 5.1.1 标识列与普通列互相转换的示例.sql │ │ 5.2.1 查表法按日期生成流水号的示例.sql │ │ 5.2.1 查表法生成流水号...

    21天学会SQL

    9.2.3 查询结果中去除重复信息 174 9.2.4 根据现有列值计算新列值 174 9.2.5 命名新列 175 9.2.6 将查询结果保存为新表 176 9.2.7 连接字段 177 9.3 使用SELECT语句获取满足查询 条件的数据 178 9.3.1 指针与字段...

    经典SQL语句大全

    SQL server 表名是 AccountFilters,表里面有一个列Account,通过EXCEL导入很多数据,我想把Account里重复的数据显示出来 1、说明:创建数据库 2、说明:删除数据库 3、说明:备份sql server 4、说明:创建新表 根据...

    精通SQL 结构化查询语言详解

    《精通SQ:结构化查询语言详解》全面讲解SQL语言,提供317个典型应用,读者可以随查随用,针对SQL Server和Oracle进行讲解,很有代表性。 全书共包括大小实例317个,突出了速学速查的特色。《精通SQ:结构化查询语言...

    程序员的SQL金典.rar

     本书特色:主要介绍SQL的语法规则及在实际开发中的应用,并且对SQL在MySQL、MS SQL Server、Oracle和DB2中的差异进行了分析;详细讲解数据库对增、删、改、查等SQL的支持并给出了相应的SQL应用案例;透彻分析函数...

    程序员的SQL金典4-8

     10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符  10.6.2 NULL和计算字段  ...

    经典全面的SQL语句大全

    10、说明:几个简单的基本的sql语句  选择:select * from table1 where 范围  插入:insert into table1(field1,field2) values(value1,value2)  删除:delete from table1 where 范围  更新:update table1 ...

    程序员的SQL金典6-8

     10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符  10.6.2 NULL和计算字段  ...

    程序员的SQL金典7-8

     10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符  10.6.2 NULL和计算字段  ...

    程序员的SQL金典3-8

     10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符  10.6.2 NULL和计算字段  ...

    sql经典语句一部分

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...

Global site tag (gtag.js) - Google Analytics