重複鍵我有一個表像這樣創建一個主鍵約束:違反PRIMARY KEY約束。不能插入對象
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是一個dublicate。但運行一個選擇:
SELECT * FROM APP_NOTIFICATION_LOG WHERE ID = 5
...返回零記錄。
這裏有什麼問題?
如果多個會話同時運行SQL(或插入中有多行),那麼使用IDENTITY列,使用'select max()+ 1'是不安全的。 –
已注意。我會相應地更新我的腳本。 –