【问题标题】:SQL: Auto Increment value during insertSQL:插入期间自动递增值
【发布时间】:2012-02-02 16:18:51
【问题描述】:

我有一个现有的表,由于某种原因,设计人员决定通过将最后使用的值存储在单独的表中来手动控制主键值(现在不能选择将表更改为使用 Identity)。

我现在需要对该表进行大规模更新,如下所示:

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' 不起作用(只是用它来显示我想做什么)。当 SQL 为每个不同的 NeedId 插入值时,如何增加 @NeedFieldID?我使用的是 SQL Server 2008。

【问题讨论】:

    标签: sql-server-2008 insert auto-increment


    【解决方案1】:

    你想要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 Server 为您完成工作。

    【讨论】:

      猜你喜欢
      • 2013-04-12
      • 1970-01-01
      • 2016-11-22
      • 2014-02-22
      • 2018-01-01
      • 2013-05-26
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多