如果表中的数据需要基于行中的多个值具有唯一约束,则适合的解决方案将是复合健。

复合主键

使用SQL Server语法创建符合主键非常简单。

create table my_parts
(id_part1 int not null,id_part2 int not null,id_part3 int not null,primary key(id_part1,id_part2,id_part3)
)
GO

在已经存在的表的情况下,通过简单的查询,复合键约束也很容易。

ALTER TABLE my_partsADD  PRIMARY KEY (id_part1, id_part2,id_part3);
GO

但是对于传统的现有系统,当您不允许在正在生产的系统中进行大的更改时,您必须通过简单地找到它们然后从表数据中删除它们来处理重复项。

这可能是一个真正的头痛,特别是如果现有数据对于实时系统运行至关重要

首先要找到重复的东西。

SELECT  id_part1 ,id_part2 ,id_part3 ,COUNT(*) AS [count]
FROM    dbo.my_parts (NOLOCK)GROUP BY id_part1 ,id_part2 ,id_part3
HAVING  COUNT(*) > 1;

复合唯一约束

在某些情况下,您可能有一个表的主键和一个复合键。在这种情况下,查找重复的查询对你没有什么用,因为您将获得所有复合键值的重复数量,但由于主键对于每一行都是唯一的,因此您不能通过在查询中包含主键来进行分组。

要获得这样的tbale,你需要采用一种不同的方法来创建它,以防你从头开始。

CREATE TABLE my_parts(id INT IDENTITY(1,1) NOT NULL,id_part1 INT NULL ,id_part2 INT NULL ,id_part3 INT NULL ,PRIMARY KEY CLUSTERED (id),CONSTRAINT [CK_my_parts] UNIQUE (id_part1,id_part2,id_part3));
GO

如果您正在处理现有数据库,该数据库已经包含要包含在复合唯一约束中的列值的重复项,则在添加约束之前,您需要从重复项中清除表。只有这样,您才能使用现有数据将复合唯一contrsint添加到existig表中。

DELETE  FROM dbo.my_parts
WHERE   id NOT IN ( SELECT  MIN(id)FROM    dbo.my_partsGROUP BY id_part1 ,id_part2 ,id_part3 );

转载于:https://www.cnblogs.com/ZaraNet/p/10156278.html

处理SQL Server中的重复行相关推荐

  1. sql删除表中重复记录_SQL从SQL表中删除重复行的不同方法

    sql删除表中重复记录 This article explains the process of performing SQL delete activity for duplicate rows f ...

  2. 如何删除sql server中的重复数据

    如何删除sql server中的重复数据 先来看下有多少重复数据,伪代码如下: select count(重复字段)-count(distinct 重复字段) from 表名 执行这个SQL伪代码候就 ...

  3. SQL Server中删除重复数据的2个方法

    要求: 用SQL语句实现删除一个表里面的重复数据,但要留下一条相同的数据. 思路: 需要两条,一条是进行重复数据标示,将重复数据中随机的一条标注为1其它的标注为0:然后还有一条语句删除所有的标注为1的 ...

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

    数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置-- 方法一 declare @max integer,@id integer declare cur ...

  5. SQL Server中的几个方法和Transact SQL 常用语句以及函数[个人推荐]

    --数据操作   SELECT --从数据库表中检索数据行和列  INSERT --向数据库表添加新数据行  DELETE --从数据库表中删除数据行  UPDATE --更新数据库表中的数据  -- ...

  6. 利用T-SQL处理SQL Server数据库表中的重复行

    Duplicate rows in a SQL Server database table can become a problem. We will see how we can find and ...

  7. SQL server 中表示去重复的语句

    SQL server 中很明显的去重复的语句是distinct select distinct 是去除重复的记录行,count(distinct Column),消除重复值 还有一些不明显的具有去重功 ...

  8. SQL server 中的插入表行数据,以及插入标识值

    语法介绍 (1)在SQL server数据库中我们如何添加新的行,并且添加数据呢? Insert:该语句向表中添加新行 values: 要插入的值 语法如下: Insert into 模式.表名(字段 ...

  9. SQL Server中的小技巧(重复、替换、截取、去空格、去小数点后的位数)

    PS:随笔写的在SQL Server中要用到的 (重复.替换.截取.去空格.去小数点后的位数) /*---------------------------重复--------------------- ...

最新文章

  1. UIView 的布局与绘制显示相关方法调用时机
  2. IAR建立stm32工程
  3. bash: make: command not found - 解决办法
  4. Linux通过kaggle api下载kaggle数据集
  5. 拼夕夕是如何“套路”你的隐私的?
  6. Oracle 原理:DML触发器和数据库触发器
  7. datetime 日期_用Hamcrest验证DateTime和日期
  8. Oracle函数大全1
  9. JAVA设计模式之抽象工厂模式和代理模式
  10. Client.Timeout exceeded while awaiting headers
  11. 计算机械效率的公式怎么读,机械效率公式总结
  12. Caffe傻瓜系列(10):draw_net.py绘制caffe net结构
  13. 【ML小结11】高斯混合模型GMM
  14. Apex里面的retainAll
  15. JavaCV开发详解之27补充篇1:使用javacv把音视频切割成多个音频分片文件,以mp3为例,把视频切割成MP3分片文件
  16. [Code+#1]大吉大利,晚上吃鸡!
  17. 专访王豫翔:编程道路上的“三少三多”(摘录)
  18. 尤里复仇退出界面_win10运行红警2尤里复仇的解决方法
  19. 推荐你身边的技术amp;产品女神加入我们,多重大礼送给你!
  20. 如何在Eclipse上创建新项目

热门文章

  1. Java对象创建、分配、布局、访问小析(HotSpot虚拟机)(二)
  2. Openstack M版快速配置(二)--刷数据库
  3. python之Excel操作
  4. 每天一道算法题(13)——使用递归颠倒栈
  5. 恢复rm删除的文件(ext3
  6. win8 开发之旅(5) --五子棋游戏开发
  7. C++读取XML树的建立和遍历
  8. 1.4万人的盛会——2010 VMWorld记行之一
  9. SQL Server2005 日期字段与字符串比较的怪异问题
  10. FireEye 红队失窃工具大揭秘之:分析复现 Confluence路径穿越漏洞 (CVE-2019-3398)