如何在不增加序列的情况下知道序列的下一个值?

时间:2017-10-09 12:47:45

标签: sql-server

sys_sequences上没有next_value列,因此您需要获取current_value并将其递增。

select convert(int, current_value) + 1 as next_value
from sys.sequences
where name = 'my_sequence'

重新启动序列时出现问题,上一个查询将返回错误的值。

alter sequence my_sequence restart with 100;

select convert(int, current_value) + 1 as next_value
from sys.sequences
where name = 'my_sequence'

这将返回101而不是真正的下一个值,即100。

您是否知道计算序列下一个值的可靠方法?

1 个答案:

答案 0 :(得分:1)

  

您是否知道计算序列下一个值的可靠方法?

据我所知,你是对的。一种可能的解决方法是将重启值设置为比您想要的少一个,并在restart后用虚拟变量将第一个值用完。

create sequence my_sequence as int start with 1;
alter sequence my_sequence restart with 99;
declare @dummy int = next value for my_sequence;

select convert(int, s.current_value) + convert(int,s.increment) as next_value
from sys.sequences s
where s.name = 'my_sequence';

dbfiddle.uk

但正如marc_s指出的那样,没有可靠的"偷看"为下一个值。