SQL更新记录,每次从1开始递增值

时间:2010-09-09 09:14:39

标签: sql sql-update auto-increment

我使用单个insert语句将批量记录添加到表中。我希望为每个新批次分配递增的数字,但每次从1开始。

所以,如果我有

Batch    Name    IncementingValue
1        Joe     1
1        Pete    2
1        Andy    3
2        Sue     1
2        Mike    2
2        Steve   3

然后我添加两条记录(使用单个insert语句):

3        Dave
3        Paul

如何针对此表运行更新语句,以便将Dave设置为1,将Paul设置为2.我不想使用游标。

2 个答案:

答案 0 :(得分:2)

排名函数ROW_NUMBER应该满足您的需求。你没有提到有关如何分配序列号的任何具体规则,所以我在这里使用名称来完成:

INSERT targetTable(Batch,Name,IncementingValue)
SELECT BatchId,
       Name,
       ROW_NUMBER() OVER (ORDER BY Name)
FROM sourceTable

答案 1 :(得分:0)

我需要完成类似日期和格式化数字的事情。

希望有人会发现这个例子很有用。

    update TEST_TABLE 
    set ref = reference
          from (
                      select 
                          *, 
                          (CONVERT(VARCHAR(10),GETDATE(),12) + RIGHT('0000' + CAST(ROW_NUMBER() OVER (ORDER BY id) AS VARCHAR(4)), 4)) as reference 
                      from TEST_TABLE
                      WHERE 
                    test_table.id > 4
                        and
                    test_table.id < 8 
                ) TEST_TABLE