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

标签 sql sql-server sequence

我正在尝试编写一个存储过程来验证序列中的 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/

相关文章:

php - Oracle 是否阻止 PHP 使用 PDO 访问 MYSQL?

sql - 通过 R 在 SQL 查询中粘贴值

sql - 如果用户定义类型为 null 则选择整个表

sql - 令人困惑的 SQL 服务器行为 - 如果 WHERE 子句中有 1<>2 表达式,则会产生不同的格式

sql-server - 使用 T-SQL 在 Linux 上获取 sql server 默认备份文件夹

r - 汇总每月状态数据以排序数据

sql - 使用 CASE WHEN 在 postgresql 中创建数据透视表的正确方法

sql - 替换逗号分隔值

python - 在 Python 中提取序列

collections - 如何在 Kotlin 中无限重复序列?