由于某些架构原因,我必须忽略索引上的重复值。它工作得很好——除了当我插入错误的数据时。我正在尝试将值插入应该抛出的 FK 列:
INSERT 语句与 FOREIGN KEY 约束“FK__constrainName”冲突。
冲突发生在数据库、表“someTable”、列“FKColumn”中。
是否有忽略重复值的逻辑阻止插入语句抛出此异常?
由于某些架构原因,我必须忽略索引上的重复值。它工作得很好——除了当我插入错误的数据时。我正在尝试将值插入应该抛出的 FK 列:
INSERT 语句与 FOREIGN KEY 约束“FK__constrainName”冲突。
冲突发生在数据库、表“someTable”、列“FKColumn”中。
是否有忽略重复值的逻辑阻止插入语句抛出此异常?
我假设你在谈论这种情况?
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 约束,因此不会出现错误。