Игнорировать повторяющиеся значения в индексе предотвращает ограничение FOREIGN KEY - PullRequest
1 голос
/ 25 октября 2011

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

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

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

1 Ответ

1 голос
/ 25 октября 2011

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

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 не будет нарушено после вставки, следовательно, нетошибка.

...