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 :
Когда IGNORE_DUP_KEY
ВЫКЛЮЧЕНО, двойное значение ключа вызывает ошибку, и весь оператор откатывается. То есть, если инструкция пыталась вставить несколько строк, строки не вставляются.
Когда IGNORE_DUP_KEY
включено, повторяющееся значение ключа просто игнорируется. Оператор успешно завершается, и все остальные строки вставляются.