SQL插入多个条目非自动递增主键

时间:2017-05-29 01:07:31

标签: sql sql-server select insert

如何插入非自动增量主键?

正如您所看到的,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

2 个答案:

答案 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