3

我有一个表,其中两个字段(idLocation, zipcode)都用作主键:

CREATE TABLE [dbo].[locationZipCode](
    [idLocation] [int] NOT NULL,
    [zipcode] [char](5) NOT NULL,
    [state] [char](2) NULL,
    CONSTRAINT [locationZipCode_pk_idLocation_zipcode] PRIMARY KEY CLUSTERED ([idLocation], [zipcode])
 )

在我的应用程序中,我正在调用:

context.InsertAllOnSubmit(entities);
context.SubmitChanges(ConflictMode.ContinueOnConflict);

并在尝试插入重复记录时出现重复键违规。这是意料之中的。如果任何记录重复,则不插入任何记录。 无论如何要忽略重复键异常并继续插入任何不违反主键约束的记录?

我意识到我可以在调用InsertAllOnSubmit()我的应用程序之前验证重复,但如果我能抓住错误并继续插入,那将是理想的。

4

1 回答 1

6

对于 SQL ServerIGNORE_DUP_KEY标志,使数据库引擎忽略键违规。如果密钥存在,数据库中没有任何变化。

 CREATE UNIQUE CLUSTERED INDEX [locationZipCode_idx] ON locationZipCode
 (
    [idLocation] ASC, [zipcode] ASC
 ) WITH ( IGNORE_DUP_KEY = ON )

不要忘记先删除当前的PK。

于 2013-02-08T18:29:47.947 回答