违反PRIMARY KEY约束。无法在对象中插入重复键

时间:2016-12-06 15:43:12

标签: tsql

我有一个主键约束表,如下所示:

    CONSTRAINT [APP_NOTIFICATION_LOG_PK] PRIMARY KEY CLUSTERED 
(   
    [ID] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

我在表格中记录了一些我现在删除的记录。

我手动找到要插入的下一个ID:

SELECT @maxid_log = max(ID) + 1 FROM APP_NOTIFICATION_LOG;  

然后我尝试插入记录:

INSERT INTO [dbo].[APP_NOTIFICATION_LOG]([ID],[COLOR],[ACTIVE],[FK_SYS_USERS_ID],[FK_APP_NOTIFICATIONS_ID], [MESSAGE],[WIN_USER_CREATOR], [FK_JOBR_RESOURCE_ID])
SELECT -- log notification created
    @maxid_log,
    anc.COLOR,
    1,
    anc.[FK_SYS_USERS_ID],
    an.id,
    'Notification cancelled!',
    @creatorUserId,
    @jobrResourceDbId
FROM [dbo].[APP_NOTIFICATIONS] an
    INNER JOIN  [dbo].[APP_NOTIFICATION_CONFIG] anc on anc.id = @configId   
WHERE an.[FK_JOBR_RESOURCE_ID] = @jobrResourceDbId 

在此阶段获取标题中的错误。它还说价值5是一个公共的。但是运行一个选择:

SELECT * FROM APP_NOTIFICATION_LOG WHERE ID = 5

...返回零记录。

这可能是什么问题?

2 个答案:

答案 0 :(得分:1)

Select会返回多条记录吗?

自行运行并查看返回的行数。

答案 1 :(得分:1)

您的内部联接返回的结果不仅仅是1,因此您尝试插入具有相同ID的多个行。