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
)是不安全的。注意。我会相应地更新我的脚本。这就是原因。这就是原因。