`

如何删除 SQL Server 表中的重复行

 
阅读更多

Microsoft
SQL Server 表不应该包含重复行和非唯一主键。为简洁起见,在本文中我们有时称主键为“键”或“PK”,但这始终表示“主键”。重复的 PK
违反了实体完整性,在关系系统中是不允许的。SQL Server 有各种强制执行实体完整性的机制,包括索引、唯一约束、主键约束和触发器。


如果表中有多组完全不同的重复的 PK 值,则逐个删除它们会很费时间。在这种情况下,可使用下面的方法: 1.首先,运行上面的 GROUP BY 查询来确定有多少组重复的 PK 值及每组的重复数。



  2.选择重复的键值放入临时表中。


例如:


SELECT col1, col2, col3=count(*)
  INTO holdkey
  FROM t1
  GROUP BY col1, col2
  HAVING count(*) > 1
 







  3.选择重复的行放入临时表中,以清除进程中的重复值。


例如:


SELECT DISTINCT t1.*
  INTO holddups
  FROM t1, holdkey
  WHERE t1.col1 = holdkey.col1
  AND t1.col2 = holdkey.col2
 






 4.此时,holddups 表应有唯一的 PK;但是,如果 t1 有重复的 PK 而行唯一(如上面的 SSN
示例),情况就不是这样了。请验证 holddups
中的各个键是否唯一,是否没有键重复而行唯一的情况。如果是这样,您必须停在该处,确定对于给定重复的键值,您希望保留哪些行。



例如,以下查询:


SELECT col1, col2, count(*)
  FROM holddups
  GROUP BY col1, col2
 







 应为各行返回计数 1。如果结果是 1,请继续执行下面的步骤 5。如果不是 1,则存在键重复而行唯一的情况,且需要您决定要保存哪些行。通常,这将需要舍弃行或为此行创建新的唯一的键值。为 holddups 表中每个此种重复 PK 执行这两个步骤之一。



  5.从原始表中删除重复的行。


例如:


DELETE t1
  FROM t1, holdkey
  WHERE t1.col1 = holdkey.col1
  AND t1.col2 = holdkey.col2
 







 6.将唯一行放回原始表中。


例如:

INSERT t1 SELECT * FROM holddups
 







 


 

分享到:
评论

相关推荐

    sqlServer删除重复数据

    SQL Server 删除重复数据是数据库管理中的一项重要任务。重复数据可能是完全重复的记录,也可能是部分关键字段重复的记录。删除重复数据可以使用多种方法,包括使用 SELECT DISTINCT 语句、使用自动生成的标识符、...

    SQL删除重复行

    本文将详细讨论如何使用SQL语句来删除重复行,分为基于单个字段和多个字段的情况,并提供两种不同的方法。 首先,我们来看基于单个字段删除重复行的情况。假设我们有一个名为`people`的表,其中`peopleId`字段可能...

    删除SQL Server 200表中重复数据.docx

    总的来说,SQL Server 2000中删除重复数据涉及到对数据的深度理解和使用适当的数据清理策略。正确安装补丁和定期维护数据库是保持其健康和高效运行的关键。在遇到问题时,了解并应用上述解决策略可以帮助你更顺利地...

    轻松消除SQL SERVER重复记录

    标题提到的"轻松消除SQL SERVER重复记录"是指在SQL Server环境中高效、便捷地去除数据库表中的重复行。描述中提到的问题是开发人员在查询和统计时可能遇到的挑战,即由于重复记录导致的结果不准确。下面我们将详细...

    删除SQL Server 200表中重复数据.pdf

    本文主要讨论如何删除表中的重复数据,以及在SQL Server 2000中遇到的一些常见问题和解决方案。 首先,让我们关注如何删除重复数据。在SQL Server中,有多种方法可以处理这种情况。一种方法是通过编写SQL程序脚本来...

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

    ### SQL Server删除重复数据的方法 在数据库管理过程中,经常会...以上三种方法各有优缺点,可以根据实际情况选择最适合的方法来删除SQL Server中的重复数据。需要注意的是,在操作前最好备份数据以防意外情况发生。

    sqlserver 循环临时表插入数据到另一张表

    sqlserver 循环临时表插入数据到另一张表 -- 声明变量 DECLARE @SupCode as varchar(100), @ProdCode as varchar(50), @PackLayer as varchar(50), @CodeStatus as varchar(50), @ProductId as varchar(50), @...

    SqlServer 永不重复的主键(非自增列)

    创建一个监控表,一个被调用的存储过程即可,推荐有存储过程编广泛使用的程序使用 调用方法 DECLARE @PKID CHAR(12)='' EXEC [dbo].[SysGetObjectPKId] @ObjectName = '你的表名称',@PKID = @PKID OUTPUT insert 你的...

    sqlserver内存释放

    3. **会话缓存**:SQL Server 还会为每个会话维护一些缓存信息,包括用户设置、临时表等。 #### 三、内存缓存清理命令 若需要清理这些缓存以优化内存使用,可以使用以下命令: 1. **DBCC FREEPROCCACHE**:清除...

    sqlserver将视图或表的记录不重复的插入到另一个表

    sqlserver将视图或表的记录不重复的插入到另一个表 纯SQL语句,定义为存储过程,程序可以直接调用存储过程,也可以供计划任务调用

    零点起飞学SQL server

    由于提供的文件信息中,标题和描述均为"零点起飞学SQL server"和"零点起飞学SQLServer",这两部分并没有提供实际的知识内容,而只是表达了一个关于SQL Server学习材料的主题。至于“墨马图书专营店”的重复内容,...

    全国城市 sqlserver版 在一个表中

    在SQL Server环境中创建并填充一个包含全国城市信息的表,涉及到多个步骤和概念,包括表结构设计、数据类型选择、主键定义、外键关系以及数据插入等。以下是对这些知识点的详细解析: ### 表结构设计 表结构是...

    删除数据表中重复记录

    本文将详细介绍如何在不同的数据库系统(如MySQL、SQL Server、Oracle等)中删除重复记录。 #### SQL删除重复记录的基本思路 删除重复记录的核心思想是先识别出哪些记录是重复的,然后通过某种方式将这些重复记录...

    SQLSERVER数据库命名规范

    本规范适用于 Microsoft SQL Server 2005 及更高版本,并参考了 Microsoft SQL Server 2008R2 中自带的数据库 ReportServer。 延伸阅读 * Microsoft SQL Server 官方文档 * SQL Server 数据库设计指南 * 数据库...

    SQL Server2005基本方法和语句

    本文将深入解析 SQL Server 2005 的基本方法与常用语句,包括数据库的创建与删除、表的创建与修改、数据的插入与删除等关键操作,旨在为数据库管理员和开发者提供全面的指导。 #### 1. 创建数据库 创建数据库是...

    SQL Server删除表及删除表中数据的方法

    在SQL Server中,删除表意味着彻底移除数据库中的整个表结构,包括其定义、索引、触发器、约束等。执行这一操作的T-SQL语句是`DROP TABLE`。例如,要删除名为`Employees`的表,你可以输入以下命令: ```sql DROP ...

    在Sql Server 数据库中利用存储过程实现动态交叉表

    本文将探讨如何在SQL Server数据库中利用存储过程实现动态交叉表。 首先,我们需要理解交叉表的基本概念。在数据分析和报表生成中,交叉表是一种以行列交叉形式展示数据统计结果的表格,通常用于展示分类数据的汇总...

    sql server阿拉伯数字转大写中文存储过程

    存储过程是 SQL Server 中的一种编程单元,用于封装一组相关的 SQL 语句以便重复使用。在本例中,我们将创建一个名为 `fun_cgnum` 的存储过程,该过程将阿拉伯数字作为输入参数,并返回对应的大写中文字符串。 以下...

    强大的SQLServer开发管理器(TOAD for SQL Server) 5.7.0.605

    ·项目管理·SQL 编辑器·查询生成器·报告作者·格式化程序·显示或隐藏、 排序或筛选器或组表中的列·录制宏·差异查看器 (脚本/文件和数据)·版本控制集成·ER 图·主详细浏览器·HTML 架构文档生成器·转换...

    SQLserver遍历所有表数据库命令

    在 SQL Server 中,存储过程是一种特殊的数据库对象,允许我们封装一系列的 SQL 语句,并重复使用这些语句。存储过程可以帮助我们简化数据库的管理和维护工作,并提高数据库的性能。 在本文中,我们使用了一个名为 ...

Global site tag (gtag.js) - Google Analytics