忽略索引上的重复值可防止FOREIGN KEY约束

时间:2011-10-25 09:45:40

标签: sql-server tsql foreign-keys ignore-duplicates

由于某些架构原因,我必须忽略索引上的重复值。它工作得很好 - 除非我插入错误的数据。我试图将值插入应该抛出的FK列:

  

INSERT语句与FOREIGN KEY约束“FK__constrainName”冲突   冲突发生在数据库,表“someTable”,列'FKColumn'。

是否存在忽略重复值的逻辑,这些重复值会阻止insert语句抛出此异常?

1 个答案:

答案 0 :(得分: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约束,因此没有错误。