INSERTの前にレコードの一意性をチェックする場合の違いをよりよく理解したいと思います。CHECKSUM (一意の制約あり)を使用する場合と、以下のような自己参照テーブルステートメントを使用する場合の違いです。どのシナリオが、一方のオプションが他方よりも最良の選択となるのでしょうか。また、その理由は何ですか。
要件:列の各セットは、テーブル内のすべてのレコードから一意である必要があります。そのため、このステートメントをまとめました。データベースへの1回の呼び出しですべての列をチェックします。
INSERT INTO tblTable
(Column1, Column2, Column3, Column4, Column5, Column6)
SELECT
@Column1, @Column2, @Column3, @Column4, @Column5, @Column6
WHERE NOT EXISTS
(SELECT DISTINCT
t1.Column1,
t1.Column2,
t2.Column3,
t2.Column4,
t3.Column5,
t3.Column6
FROM tblTable t1
JOIN tblTable t2 ON (t1.UID = t2.UID)
JOIN tblTable t3 ON (t1.UID = t3.UID)
WHERE
t1.Column1 = @Column1 and
t1.Column2 = @Column2 and
t2.Column3 = @Column3 and
t2.Column4 = @Column4 and
t3.Column5 = @Column5 and
t3.Column6 = @Column6)