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。
您是否知道计算序列下一个值的可靠方法?
答案 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';
但正如marc_s指出的那样,没有可靠的"偷看"为下一个值。