IGNORE_DUP_KEY в Sql Server 2000 с составным первичным ключом - PullRequest
1 голос
/ 05 апреля 2011

Я пытаюсь создать таблицу в SQL Server 2000, у которой есть составной первичный ключ с IGNORE_DUP_KEY, установленным в ON.

Я пытался найти эту опцию в SQL Server Management Studio Express, но не смог ее найти, так что теперь я приступил к программному созданию таблицы. Каждая команда SQL, которую я нашел в Google или в переполнении стека, выдает ошибку:

Неверный синтаксис рядом с '('.

Таблица должна иметь 4 столбца (A, B, C, D), все десятичные числа (18), и мне нужен первичный ключ на A, B, C.

Буду признателен, если кто-нибудь сможет опубликовать пример команды CREATE.

1 Ответ

3 голосов
/ 05 апреля 2011
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 включено, повторяющееся значение ключа просто игнорируется. Оператор успешно завершается, и все остальные строки вставляются.

...