2012-01-04 72 views
3

我有一個現有的表,由於某種原因,設計者決定通過將最後一次使用的值存儲在單獨的表中來手動控制主鍵值(更改要使用的表的身份不是選項現在)。SQL:在插入過程中自動增量值

我現在需要做一個大規模更新這個表如下:

DECLARE @NeedFieldID int 
SET @NeedFieldID = 62034 

    INSERT INTO T_L_NeedField (NeedID, NeedFieldID, FieldName, Sequence, DisplayAs, FieldPrompt, DataType, ValidOptions, IsRequiredForSale) 
    (
     SELECT 
      DISTINCT n.NeedID, 
       @NeedFieldID + 1,   
      'DetailedOutcome', 
      999, 
      'Detailed Outcome', 
      'Select appropriate reason for a No Sale outcome', 
      'T', 
      'Pricing, Appointment Date/Time Not Available, Will Call Back, Declined', 
      0 
     FROM T_L_Need n 
      INNER JOIN T_L_NeedField nf 
       ON n.NeedID = nf.NeedID 
     WHERE (n.Need LIKE 'Schedule%' AND n.Disabled = 0) 
    ) 

顯然「@NeedFieldID + 1」不(只是用它來展示一下我想要做的)工作。我如何增加@NeedFieldID作爲SQL插入每個不同的NeedId的值?我使用SQL Server 2008的

回答

5

你想row_number()

DECLARE @NeedFieldID int 
SET @NeedFieldID = 62034 

    INSERT INTO T_L_NeedField (NeedID, NeedFieldID, FieldName, Sequence, DisplayAs, FieldPrompt, DataType, ValidOptions, IsRequiredForSale) 
    (
     SELECT 
      DISTINCT n.NeedID, 
       @NeedFieldID + row_number() over (order by n.NeedID),   
      'DetailedOutcome', 
      999, 
      'Detailed Outcome', 
      'Select appropriate reason for a No Sale outcome', 
      'T', 
      'Pricing, Appointment Date/Time Not Available, Will Call Back, Declined', 
      0 
     FROM T_L_Need n 
      INNER JOIN T_L_NeedField nf 
       ON n.NeedID = nf.NeedID 
     WHERE (n.Need LIKE 'Schedule%' AND n.Disabled = 0) 
    ) 

然而,最好的辦法就是讓NeedFieldID標識列,只是讓SQL服務器做的工作適合你。

+0

謝謝,這個伎倆! – BrianKE 2012-01-04 19:19:38