3

いくつかのアーキテクチャ上の理由により、インデックスで重複する値を無視する必要があります。間違ったデータを挿入している場合を除いて、それは完全にうまく機能します。スローするはずのFK列に値を挿入しようとしています:

INSERT ステートメントが FOREIGN KEY 制約 "FK__constrainName" と競合しました。
データベース、テーブル「someTable」、列「FKColumn」で競合が発生しました。

挿入ステートメントがこの例外をスローするのを防ぐ重複値を無視するロジックはありますか?

4

1 に答える 1

4

このような状況について話していると思いますか?

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 制約に違反していないため、エラーは発生しません。

于 2011-10-25T10:12:45.943 に答える