これは悪い考えであり、一意の制約を使用する代わりに、データベースにないデータのみを常に使用する必要があることについて話している投稿がここにあります。INSERT
現在、私のテーブル構造は次のとおりです。
CREATE TABLE [dbo].[TEST](
[ColA] [varchar](255) NULL,
[ColB] [datetime] NULL,
[ColC] [datetime] NULL,
[ColD] [int] NOT NULL,
) ON [PRIMARY]
一意の行のみが期待されるため、一意の制約を次のように設定することは理にかなっています。
ALTER TABLE dbo.TEST
ADD CONSTRAINT uniqueRows UNIQUE (ColA, ColB, ColC, ColD) WITH (IGNORE_DUP_KEY = ON)
新しい情報が消費されると、多くの理由で重複データが処理される可能性があります。これは、私のコードが状態を維持していないためです。したがって、少なくとも私にとっては、重複データを無視することが理にかなっています。
ただし、リンクされた投稿では、@ PhilipKelley の回答で、これは悪い考えであり、次の行に沿って何かをチェックする必要があると述べています。
INSERT INTO X
VALUES(Y,Z)
WHERE Y NOT IN (SELECT Y FROM X)
私の場合、これは次のように変換されます。
INSERT INTO dbo.TEST
VALUES(ValA,ValB,ValC,ValD)
WHERE (Some complicated check)
または、派手な主キーを作成することもできます。ここでの回答は、これが実際に機能として使用されていることがわかっている場合は、先に進んでIGNORE_DUP_KEY
オプションを使用すれば問題ないことを示唆しています。私の場合、推奨されるパスは何ですか?