2017-05-29 51 views
0

如何插入非自动增量主键?SQL插入多个条目非自动增量主键

正如你所看到的选择至少有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

任何想法的号码吗?谢谢 – ove

+0

任何帮助?戈登下面的回答不起作用 – ove

回答

1

您应该使用identity列。但缺席的是,您可以使用row_number()

SELECT TOP 100 
      (SELECT MAX(DOCUMENT_ID) FROM dbo.DOCUMENTS) + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), 
      . . . 

这不适用于空表。

+0

@Gordon_Linoff这是一个旧的数据库设计,用于多个来源,因此不会修改结构更安全 – ove

+0

得到此错误 子查询返回的值超过1。当子查询遵循=,!=,<, <= , >,> =或当子查询用作表达式时,这是不允许的。 – ove

+0

@Gordon_Linoff不知道为什么 – ove

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