如何插入非自动增量主键?
正如您所看到的,select至少有100行,对于每个插入,我需要获取最新的递增ID。我无法使用SCOPE_IDENTITY
,我们无法修改数据库结构。
目前收到错误
违反PRIMARY KEY约束'PK_DOCUMENT'。无法在对象'dbo.DOCUMENTS'
中插入重复键
代码:
INSERT INTO [dbo].[DOCUMENTS]
(DOCUMENT_ID, DOCUMENT_TYPE, DOCUMENT_REF, DOCUMENT_NOTE,
DOCUMENT_DATE, LAST_UPDATE_ID, LAST_UPDATE_DATE,
DOCUMENT_FUNCTION_CODE, BATCH_ID, AUDIT_XML, AUDIT_USER, REMINDER_DATE)
SELECT TOP 100
(SELECT MAX(DOCUMENT_ID) + 1 FROM dbo.DOCUMENTS),
NULL, NULL,
'MIGRATED FROM BRING UP NOTES ' + CAST(GETDATE() AS VARCHAR(20)) + ' ' + sr.BRINGUP_NOTES,
GETDATE(), NULL, NULL,
NULL, NULL, NULL, NULL, sr.BRINGUP_DATE
FROM
[dbo].[SERVICE_REQUESTS] sr
WHERE
BRINGUP_NOTES IS NOT NULL
ORDER BY
SERVICE_REQUEST_ID DESC
答案 0 :(得分:1)
您应该使用storyboard
列。但如果没有,您可以使用identity
:
row_number()
这不适用于空表。
答案 1 :(得分:0)
试试这个.......使用行号以及最大文档ID
INSERT INTO [dbo].[DOCUMENTS]
(DOCUMENT_ID, DOCUMENT_TYPE, DOCUMENT_REF, DOCUMENT_NOTE,
DOCUMENT_DATE, LAST_UPDATE_ID, LAST_UPDATE_DATE,
DOCUMENT_FUNCTION_CODE, BATCH_ID, AUDIT_XML, AUDIT_USER, REMINDER_DATE)
SELECT TOP 100
(SELECT MAX(DOCUMENT_ID) + 1 FROM dbo.DOCUMENTS) + ROW_NUMBER() over (ORDER BY SERVICE_REQUEST_ID DESC),
NULL, NULL,
'MIGRATED FROM BRING UP NOTES ' + CAST(GETDATE() AS VARCHAR(20)) + ' ' + sr.BRINGUP_NOTES,
GETDATE(), NULL, NULL,
NULL, NULL, NULL, NULL, sr.BRINGUP_DATE
FROM
[dbo].[SERVICE_REQUESTS] sr
WHERE
BRINGUP_NOTES IS NOT NULL
ORDER BY
SERVICE_REQUEST_ID DESC