我有一个现有表,其中行序号在正常软件操作中增加 100。我需要执行大插入并保持这种增量方法。我以为我会使用 ROW_NUMBER() 但我不知道它是否可以以这种方式增加。
我会感谢您对这个简单主题的帮助,但是,如果您想获得更具体的信息,还请注意,行序列对于项目来说是唯一的,并且一些记录已经开始了该序列。例如
Project Category Sequence
Proj1 Cat4 100
Proj1 Cat2 200
Proj2 Cat7 100
Proj2 Cat1 200
Proj3 Cat1 100
因此,如果这些已经存在并且我正在插入新记录,我必须考虑每个项目已经开始的序列。因此,如果我为 Proj1 插入行,则序列值必须为 300、400、...
到目前为止,这是我的代码块:
WITH CTE (PROJECTNUM, COSTCATID, LINE) AS
( SELECT PROJECTNUM, PACOSTCATID, ROW_NUMBER() OVER(PARTITION BY PROJECTNUM ORDER BY PACOSTCATID)
+ (SELECT MAX(LNITMSEQ) FROM PROJECTTABLE WHERE PAPROJNUMBER = A.PROJECTNUM)
FROM PROJECTSHORTLIST A, CATEGORYTABLE
WHERE <stuff you don't care about>
)
INSERT INTO PROJECTTABLE
(PAPROJNUMBER, PACOSTCATID, LNITMSEQ)
SELECT PROJECTNUM, COSTCATID, LINE
FROM CTE;
您可以看到这将产生以 1 递增的记录,而 Proj1 将是 301、302。
非常感谢您的脑力。
更新:我将补充一点,如果在第一次插入行之后可以更容易地在更新语句中完成 100 的增量,那是完全可以接受的。谢谢你。