您好我如何使用以特定值
开头的增量值更新列例如,如果表store
包含以下示例数据
ProID ProName
1 Pro1
2 Pro2
3 Pro3
etc ..
如何使用例如10的起始值更新ProID
值,然后增加其余值,使其为
ProID ProName
10 Pro1
11 Pro2
12 Pro3
etc ..
答案 0 :(得分:2)
我将为这个问题提供一个更通用的答案。并且,我将假设ProId
具有unique
索引。所以,显而易见的解决方案是:
update store
set ProID = ProID + 9;
无法保证正常工作。它可能会生成重复项(如果已经有id = 10)。它不会填补空白。
不幸的是,我认为您需要分两步完成此操作(当存在唯一索引时)。在更新表时,问题是重复的。如果这样有效,那么很棒:
with toupdate as (
select s.*, 9 + row_number() over (order by ProId) as new_ProId
from store
)
update toupdate
set ProId = new_ProId;
但是,您可能需要这样做:
with toupdate as (
select s.*, 9 + row_number() over (order by ProId) as new_ProId
from store
)
update toupdate
set ProId = - new_ProId; -- ensure no duplicates by using a negative sign
update store
set ProId = - ProId; -- get rid of the negative sign
说了这么多,更新表的主键几乎不是正确的事情。价值差距通常不是问题。查询表时可以使用row_number()
来删除间隙,如果出于某种原因需要这样做。
答案 1 :(得分:1)
with cte as
( select prodID, row_number() over (order by prodID) as rn
from table
)
update cte set prodID = rn + 9