我使用单个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.我不想使用游标。
答案 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