SQL Server - 从序列中获取下一个值而不推进current_value

时间:2015-12-11 20:58:26

标签: sql sql-server sequence

我正在尝试编写一个存储过程,用于验证序列中的NEXT VALUE是否等于表中的最大值,加1.我是通过将表号与序列的current_value进行比较来实现的。 sys.sequences。

但是,我遇到了麻烦,因为我不确定如何区分current_value为'1'且NEXT VALUE为'1'的情况,而NEXT VALUE将为'2'。

我不想实际调用NEXT VALUE,因为我不想提前序列的计数。

例如,这种情况:

CREATE SEQUENCE  testseq AS bigint START WITH 1 INCREMENT BY 1 CACHE 500000
select current_value from sys.sequences where name = 'testseq'

其中current_value为1,下一个值为1

VS

select NEXT VALUE for testseq
select current_value from sys.sequences where name = 'testseq'

其中current_value为1,下一个值为2。

我将无法更改序列的属性。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

适用于 SQL Server 2017 及更高版本:

SELECT CASE WHEN last_used_value IS NULL
THEN CAST(current_value as bigint)
ELSE CAST(current_value as bigint) + 1
END AS next_val
FROM sys.sequences WHERE name = 'sequence_name'

答案 1 :(得分:1)

select cast(current_value as int) + cast(increment as int) from sys.sequences where name = 'testseq'