2015-12-22 5 views
2

У меня есть таблица с записями, как показано ниже изображенияКак бороться с дублированием записей в базе данных SQL Server

Student Table

Я должен поддерживать реплику студента ABC, как показано ниже, для каждого студента в каждом процессе может содержать только одну активную строку. Каков наилучший способ остановить дубликаты для каждой записи студентов с конца db. Как я управляю уникальностью активной строки.

Как проверить новые ВСТАВКИ для предотвращения дублирования в будущем.

+2

Здесь нет дубликатов записей. Что именно вы пытаетесь достичь? – Anton

+0

Ваш вопрос не очень ясен. Существуют тысячи примеров того, как найти дубликаты через SO и остальную часть Интернета. Ни одна из ваших строк на самом деле не дублирует образец. Возможно, если бы вы могли объяснить, что вы пытаетесь сделать, мы можем помочь. –

+0

Я думаю, что OP должен проверить новые INSERTS, чтобы предотвратить будущие дубликаты. Не удалять дубликаты из существующих данных. –

ответ

2

Вы можете сохранить уникальность с помощью уникального отфильтрованный индекс:

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

Here является документация по этой теме.

+0

Точно я хочу. спасибо –

0

Я бы сделал это с ограничением CHECK, которое вызывает UDF.

Вы также можете управлять этим с помощью TRIGGER.

0

попробуйте

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

. , Как это должно поддерживать * уникальность. –

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

1 для битового типа истинного

+0

Можете ли вы подробнее рассказать о деталях своего решения? Объясните, что вы сделали и как это должно решить проблему. В противном случае ваш ответ может быть удален из-за низкого качества. – user1438038

0

Уникальный индекс с фильтром может решить проблему

он также известен как отфильтрованной индекс

create unique index unq_table_filtered_IX 
    on table(columns) where condition; 
Смежные вопросы