Tsql 违反主键约束。无法在对象中插入重复的键

Tsql 违反主键约束。无法在对象中插入重复的键,tsql,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] 我已经删除了表中的一些

我创建了一个带有主键约束的表,如下所示:

    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:

SELECT * FROM APP_NOTIFICATION_LOG WHERE ID = 5
…返回零条记录


这里可能有什么问题?

Select返回多条记录


单独运行它,查看返回了多少行。

Select正在返回多条记录


单独运行它,查看返回了多少行。

您的内部联接返回的结果不止一个,因此您尝试插入多个具有相同id的行。

您的内部联接返回的结果不止一个,因此您尝试插入多个具有相同id的行。

使用标识列,使用
select max()+如果多个会话同时运行SQL(或insert中有多行),则1
不安全。注意。我将相应地更新脚本。如果多个会话同时运行SQL(或插入中有多行),则使用标识列(使用
select max()+1
)是不安全的。注意。我会相应地更新我的脚本。这就是原因。这就是原因。