2017-05-29 160 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