2011-10-25 5 views
1

Из-за некоторых архитектурных причин я должен игнорировать повторяющиеся значения индекса. Он работает отлично - кроме случаев, когда я вставляю неверные данные. Я пытаюсь вставить значение в столбец FK, который должен бросить:Игнорировать повторяющиеся значения в индексе запрещает ограничение FOREIGN KEY

Оператор INSERT противоречил ограничению FOREIGN KEY «FK__constrainName».
Конфликт произошел в базе данных, таблица «someTable», столбец «FKColumn».

Есть ли логика, игнорирующая повторяющиеся значения, которые мешают инструкции insert из этого исключения?

ответ

1

Предполагаю, вы говорите об этой ситуации?

CREATE TABLE T2(T2_ID INT PRIMARY KEY) 

INSERT INTO T2 VALUES (1),(2) 

CREATE TABLE T1 (T1_ID INT, T2_ID INT REFERENCES T2) 
CREATE UNIQUE CLUSTERED INDEX IX ON T1(T1_ID) WITH IGNORE_DUP_KEY 

INSERT INTO T1 VALUES (1,2),(1,2),(2,3),(2,3) 

/*FK Violation - No rows inserted*/ 
SELECT * 
FROM T1 

/*Duplicate key violation and potential FK Violation - one row inserted*/ 
INSERT INTO T1 VALUES (1,2),(1,2),(1,3),(1,3) 

SELECT * 
FROM T1 

DROP TABLE T1 
DROP TABLE T2 

Если строка не вставлена, потому что это может вызвать дубликат ключа нарушение, то ограничение FK не нарушается после вставки, следовательно, никакой ошибки.

+0

Теперь это кажется настолько очевидным. Спасибо. – Falcon