如何处理sqlserver数据库中的重复记录

如何处理sqlserver数据库中的重复记录,sql,sql-server,database,sql-server-2008,sql-server-2012,Sql,Sql Server,Database,Sql Server 2008,Sql Server 2012,我有一个表,记录如下图所示 我必须维护学生ABC的副本,如下所示,因为每个进程中的每个学生只能包含一个活动行。从db端停止每个学生条目重复的最佳方法是什么。 如何管理活动行的唯一性 如何检查新插入以防止将来重复。我将使用调用UDF的检查约束来执行此操作 您还可以使用触发器来管理此操作。您可以使用唯一的筛选索引来维护唯一性: create unique index unq_table_name_processid_filtered on table(name, processid) wh

我有一个表,记录如下图所示

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


如何检查新插入以防止将来重复。

我将使用调用UDF的检查约束来执行此操作


您还可以使用触发器来管理此操作。

您可以使用唯一的筛选索引来维护唯一性:

create unique index unq_table_name_processid_filtered
    on table(name, processid) where IsActive = 'true';
是关于这个主题的文档。

试试看

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

1对于位类型true

使用过滤器的唯一索引可以解决此问题

它也称为过滤索引

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

这里没有重复的记录。你到底想达到什么目的?你的问题不是很清楚。有成千上万的例子说明了如何在SO和互联网上的其他地方找到副本。在发布的示例中,您的行实际上都不是重复的。如果你能解释一下你想做什么,我们可能会有所帮助。我认为OP需要检查新的插入,以防止将来重复。不删除现有数据中的重复项。如何实现唯一键以检查唯一活动行@@Tab Alleman您完全正确捕获。这是如何保持独特性的。你能详细说明一下你的解决方案吗?解释你做了什么,以及这是如何解决问题的。否则,您的答案可能会因为质量差而被删除。
create unique index unq_table_filtered_IX
    on table(columns) where condition;