create table MyTable2 (
[a] decimal(18,2) not null,
[b] decimal(18,2) not null,
[c] decimal(18,2) not null,
[d] decimal(18,2),
CONSTRAINT myPK PRIMARY KEY (a,b,c)
)
CREATE UNIQUE INDEX MyUniqueIgnoringDups
ON MyTable2 (a,b,c)
WITH IGNORE_DUP_KEY --SQL 2000 syntax
--WITH(IGNORE_DUP_KEY = On) --SQL 2005+ syntax
--insert some data to test.
insert into mytable2 (a,b,c,d) values (1,2,3,4);--succeeds; inserts properly
insert into mytable2 (a,b,c,d) values (1,2,3,5);--insert fails, no err is raised.
-- "Duplicate key was ignored. (0 row(s) affected)"
興味のある方のために、MSDNフォーラムのErlandSommarskogから何が起こっているかについての説明があります。
がOFFの場合IGNORE_DUP_KEY
、キー値が重複するとエラーが発生し、ステートメント全体がロールバックされます。つまり、ステートメントが複数の行を挿入しようとした場合、行は挿入されません。
がオンの場合IGNORE_DUP_KEY
、重複するキー値は単に無視されます。ステートメントは正常に完了し、他の行が挿入されます。