我正在尝试编写一个存储过程来验证序列中的 NEXT VALUE 是否等于表中的最大数加上 1。我通过将表号与序列的 current_value 进行比较来做到这一点系统序列。
但是,我遇到了麻烦,因为我不确定如何区分 current_value 为“1”和 NEXT VALUE 为“1”的情况与 NEXT VALUE 为“1”的情况'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
对比
select NEXT VALUE for testseq
select current_value from sys.sequences where name = 'testseq'
current_value 为 1,下一个值为 2。
我将无法更改序列的属性。有什么想法吗?
最佳答案
适用于 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'
关于SQL Server - 从序列中获取下一个值而不推进 current_value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34232448/