【问题标题】:How to deal with duplicate records in SQL Server database如何处理 SQL Server 数据库中的重复记录
【发布时间】:2015-12-22 16:00:50
【问题描述】:

我有一张记录如下图的表格

我必须维护学生 ABC 的副本,如下所示,因为每个进程中的每个学生只能包含一个活动行。从 db 端停止每个学生条目重复的最佳方法是什么。 我如何管理活动行的唯一性。

如何检查新的 INSERTS 以防止将来出现重复。

【问题讨论】:

  • 这里没有重复记录。你到底想达到什么目的?
  • 你的问题不是很清楚。有数以千计的示例说明如何在 SO 和 Internet 的其余部分中查找重复项。在发布的示例中,您的行实际上都不是重复的。也许如果您能解释一下您要做什么,我们可以提供帮助。
  • 我认为 OP 需要检查新的 INSERTS 以防止将来重复。不从现有数据中删除重复数据。
  • 我如何实现一个唯一键来检查唯一的活动行
  • @@Tab Alleman 你说得对

标签: sql sql-server database sql-server-2008 sql-server-2012


【解决方案1】:

您可以通过使用唯一过滤索引来保持唯一性:

create unique index unq_table_name_processid_filtered
    on table(name, processid) where IsActive = 'true';

Here 是有关该主题的文档。

【讨论】:

    【解决方案2】:
    create unique index unq_table_name_processid_filtered on table(name, processid) where IsActive = 1;
    

    1 表示位类型 true

    【讨论】:

    • 您能否详细说明您的解决方案的细节?解释你做了什么以及这应该如何解决问题。否则,您的答案可能会因质量不佳而被删除。
    【解决方案3】:

    我会使用调用 UDF 的 CHECK 约束来做到这一点。

    您也可以使用 TRIGGER 进行管理。

    【讨论】:

      【解决方案4】:

      试试看

       WITH CTE 
       AS
          (
          SELECT *,RN=ROW_NUMBER() OVER (PARTITION BY orgName ORDER BY orgName DESC)
          FROM organizations 
          )
          select * 
          from CTE 
          where RN>1
      

      【讨论】:

      • 。 .这应该如何保持唯一性。
      【解决方案5】:

      带过滤器的唯一索引可以解决问题

      也称为过滤索引

      create unique index unq_table_filtered_IX
          on table(columns) where condition;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-22
        • 2011-06-23
        • 1970-01-01
        • 2018-08-31
        • 2014-06-08
        • 1970-01-01
        • 2020-04-01
        相关资源
        最近更新 更多