1

我正在尝试在 SQL Server 2000 中创建一个表,该表具有一个复合主键,其中 IGNORE_DUP_KEY 设置为 ON。

我试过在 SQL Server Management Studio Express 中寻找这个选项,但我找不到它,所以现在我要以编程方式创建表。我在 Google 或 Stack Overflow 上找到的每个 SQL 命令都会给我一个错误:

'(' 附近的语法不正确。

该表应该有 4 列(A、B、C、D)所有十进制(18),我需要 A、B、C 上的主键。

如果有人可以发布示例 CREATE 命令,我将不胜感激。

4

1 回答 1

3
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)"

对于任何感兴趣的人,以下是Erland Sommarskog 在 MSDN 论坛上发生的事情的解释:

IGNORE_DUP_KEY为 OFF 时,重复的键值会导致错误并回滚整个语句。也就是说,如果语句试图插入多行,则不会插入任何行。

IGNORE_DUP_KEY为 ON 时,重复的键值将被简单地忽略。该语句成功完成并插入任何其他行。

于 2011-04-05T01:22:11.210 回答