在数据的建表中,一般进行下列的语句进行数据表的建立。如下:
CREATE TABLE [dbo].[RMS_FACRPT_RVOK] (
[ID] bigint NOT NULL IDENTITY(1,1) ,
[SRCMSGDATE] datetime2(7) NOT NULL DEFAULT (getdate()) ,
[USERID] varchar(7) COLLATE Chinese_PRC_CI_AS NOT NULL DEFAULT '' ,
[ECID] int NOT NULL DEFAULT ((0)) ,
[PTCODE] varchar(10) COLLATE Chinese_PRC_CI_AS NOT NULL DEFAULT '' ,
[PTMSGID] bigint NOT NULL DEFAULT ((0)) ,
[LOCALGATENO] int NOT NULL DEFAULT ((0)) ,
[PHONE] varchar(22) COLLATE Chinese_PRC_CI_AS NOT NULL DEFAULT ('ERRPHONE') ,
[RECVRPTTM] datetime2(7) NOT NULL DEFAULT (sysdatetime()) ,
[ERRORCODE] varchar(8) COLLATE Chinese_PRC_CI_AS NOT NULL DEFAULT '' ,
[RMSRPTTYPE] tinyint NOT NULL DEFAULT ((0)) ,
[SIMLTDTYPE] tinyint NOT NULL DEFAULT ((0)) ,
CONSTRAINT [PK_RMS_FACRPT_RVOK] PRIMARY KEY ([ID])
)
ON [PRIMARY]
GO
CREATE INDEX [IDX_RMS_FACRPT_RVOK_PTMSGID] ON [dbo].[RMS_FACRPT_RVOK] //PTMSGID是唯一的索引
([PTMSGID] ASC)
ON [PRIMARY]
GO
如上可以看到,primary key对应的是ID(自增的ID),一般不会重复的。如果将该ID进行如下图的设制:
如果出现 ID冲突的话(也就是强行的置为重复的话), sql server会报"已忽略重复的主键"。如果你程序入库的时候报”已忽略重复的主键“,但是这绝对不是这地方引起的,因为ID这个是自增的值 ,在数据库中是不存在重复的。那么这情况是怎么导致的呢?
再回头看下如上,我这设了一个唯一的索引IDX_RMS_FACRPT_RVOK_PTMSGID(和上图不符),我只要在该唯一的索引的属性这里,我再设置该值 索引为”已忽略重复的主键“,那么当PTMSGID这个字段的值重复的时候,数据库的日志就会报出”已忽略重复的主键"这样的错误!!!