我正在尝试编写一个存储过程,用于验证序列中的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。
我将无法更改序列的属性。有什么想法吗?
答案 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'