前面我写了个博客记录如何去重一个oracle表(link), 主要是利用了oracle的rowid伪列和row_number()分析函数. 有读者写邮件问, 如何去重一个SQL Server表, 场景和前面文章一样, 即: 有部分字段有重复值, 表结构中没有一个能唯一定位的ID列, 也不允许修改表结构. 下面我给了个基本的思路.

--步骤0, 根据原表table_a, 创建一个临时表table_a_temp, 仅仅增加了一个自增列row_id, 原因是SQL Server没有类似Oracle的rowid伪列, 我们就自己造一个. 
--假设原表的结果为: create table table_a (pk int, other_field char(10));
create table table_a_temp (pk int, other_field char(10), row_id int IDENTITY(1,1) NOT NULL);

--步骤1, 将重复PK的记录加载到临时表table_a_temp
truncate table table_a_temp ;
insert into table_a_temp(pk, other_field) select pk, other_field from table_a a group by pk, other_field having count(*)>1 ;

--步骤2, 删除所有重复PK的记录, 这不是去重
--SQL Server 关联delete的写法有点诡异 delete table_a from table_a
delete table_a  from table_a  b  inner join
(
select pk,other_field from table_a a group by pk, other_field having count(*)>1
) c
on b.pk=c.pk and b.other_field=c.other_field ;

--步骤3, 重表table_a_temp. 因为table_a_temp表有一个自增字段row_id, 这时候, 我们就可以利用row_id来去重
--代码略, 可参考oracle版本的代码(link)

--步骤4, 将去重后的table_a_temp记录补会到原表table_a, 这样table_a就没有重复的pk
insert into table_a (pk, other_field) select pk, other_field from table_a_temp ;

转载于:https://www.cnblogs.com/harrychinese/archive/2011/05/09/eliminate_duplicate_records_in_sql_table.html

如何去重一个SQL Server表相关推荐

  1. SQL Server 表分区实战系列(文章索引)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 前言(Introduction) 实战说明(In Action) 表分区逻辑结构图(Construction) 表分区学 ...

  2. 在一个SQL Server表中的多个列找出最大值

    在一个SQL Server表中一行的多个列找出最大值 有时候我们需要从多个相同的列里(这些列的数据类型相同)找出最大的那个值,并显示 这里给出一个例子 IF (OBJECT_ID('tempdb..# ...

  3. SQL Server 表和索引存储结构

    SQL Server 表和索引存储结构 杜飞 在上一篇文章中,我们介绍了SQL Server数据文件的页面类型,系统通过96个字节的头部信息和系统表从逻辑层面上将表的存储结构管理起来,具体到表的存储结 ...

  4. SQL Server表分区的NULL值问题

    原文:SQL Server表分区的NULL值问题 SQL Server表分区的NULL值问题 SQL Server表分区只支持range分区这一种类型,往往会被大家吐槽 人家MySQL支持四种类型:R ...

  5. 更改SQL Server表所有者的操作方法

    更改SQL Server表所有者的操作方法 笔者用过两种方法: 1) 通过修改当前数据库的对象表:sysobjects. sysobjects存储的是当前数据库中的表的基本信息,其中由一个字段:uid ...

  6. SQL Server表分区【转】

    转自:http://www.cnblogs.com/knowledgesea/p/3696912.html SQL Server表分区 什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个 ...

  7. 52. SQL Server -- 表分区实战系列(文章索引)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 前言(Introduction) 实战说明(In Action) 表分区逻辑结构图(Construction) 表分区学 ...

  8. SQL Server表分区-水平分区

    SQL Server表分区,sql server水平分区 转自:http://www.cnblogs.com/knowledgesea/p/3696912.html  根据时间的,直接上T-SQL代码 ...

  9. ssis导入xml_使用SSIS包将XML文档导入SQL Server表

    ssis导入xml This article guides you through importing XML documents into SQL tables using SSIS package ...

最新文章

  1. 上市公司财务报表分析——以中国联通为例
  2. 动态匹配路由的基本用法||路由组件传递参数
  3. .net EF框架 MySql实现实例
  4. Docker环境下:ImportError: libSM.so.6: cannot open shared object file: No such file or directory
  5. 为什么用自己的电脑部署服务器之后外网访问不到呢?并且该如何解决这个问题呢?...
  6. SAP License:FI常用表
  7. 【转】如何在命令行脚本中启动带参数的Windows服务
  8. 49. PHP 页面静态化(2)
  9. .Net 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等) 2
  10. Python基本语法
  11. c语言编写2阶booth算法,关于Booth算法的C语言实现
  12. Incompatible magic value xxxxxx in class file
  13. Dubbo入门基础与实例讲解(超详细)
  14. [Phonegap+Sencha Touch] 移动开发19 某些安卓手机上弹出消息框 点击后不消失的解决的方法...
  15. Invalid bound statement (not found)出现的原因和解决方法
  16. Excel 数据统计小技巧
  17. 电子书转换器calibre
  18. 安卓zip解压软件_手机压缩软件ZArchiver下载、使用教程丨免费、中文,支持7z、zip、rar等所有格式...
  19. 修复黯淡的夜拍照片!
  20. [脚本]用windows批处理文件自动化Python(虚拟)环境的配置

热门文章

  1. 拓扑排序--关键路径
  2. 1的个数 itoa函数使用
  3. 入门linux经典书籍--linux从入门到精通
  4. 扇区、磁盘块、页、页框、缓冲区之间的关系!
  5. ISP、IAP、ICP的区别!
  6. 网络管理的5大功能!
  7. 如何在Oracle中复制表结构和表数据
  8. oracle 创建带参数的视图
  9. 基于可靠消息方案的分布式事务(四):接入Lottor服务
  10. 树莓派apt-get下载网速太慢