从 SQL Server SEQUENCE 获取当前值

Posted

技术标签:

【中文标题】从 SQL Server SEQUENCE 获取当前值【英文标题】:Get current value from a SQL Server SEQUENCE 【发布时间】:2012-11-22 01:16:50 【问题描述】:

我想从我的序列中获取当前值 - 与序列属性窗口 SQL Server Management Studio 中显示的值相同

我的序列是用这个语句创建的:

CREATE SEQUENCE [OrderNumberSequence]
    as int
    START WITH 4000
    INCREMENT BY 1
    MINVALUE 0
    NO MAXVALUE
    NO CACHE;
GO

我已经尝试过这个SQL from MSDN - 但结果是每次运行查询时我的数字都会增加 5

DECLARE  
  @FirstSeqNum sql_variant
, @LastSeqNum sql_variant
, @CycleCount int
, @SeqIncr sql_variant
, @SeqMinVal sql_variant
, @SeqMaxVal sql_variant ;

EXEC sys.sp_sequence_get_range
@sequence_name = N'[OrderNumberSequence]'
, @range_size = 5
, @range_first_value = @FirstSeqNum OUTPUT 
, @range_last_value = @LastSeqNum OUTPUT 
, @range_cycle_count = @CycleCount OUTPUT
, @sequence_increment = @SeqIncr OUTPUT
, @sequence_min_value = @SeqMinVal OUTPUT
, @sequence_max_value = @SeqMaxVal OUTPUT ;

-- The following statement returns the output values
SELECT
  @FirstSeqNum AS FirstVal
, @LastSeqNum AS LastVal
, @CycleCount AS CycleCount
, @SeqIncr AS SeqIncrement
, @SeqMinVal AS MinSeq
, @SeqMaxVal AS MaxSeq ;

有没有办法在不改变数字的情况下获得价值?

【问题讨论】:

【参考方案1】:

您可以从sys.sequences中选择current_value

SELECT current_value FROM sys.sequences WHERE name = 'OrderNumberSequence' ;

DEMO

【讨论】:

我试图将current_value 的值存储在我用DECLARE 创建的变量中,结果发现current_value 的类型是sql_variant。这是一个惊喜。我期望/需要一个intbigint 并且不得不使用CONVERT 对于那些想知道@BernhardDöbler 在说什么的人,语法是SELECT CAST(current_value AS int) FROM sys.sequences ...

以上是关于从 SQL Server SEQUENCE 获取当前值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用实体框架在 Sql Server Express 中获取下一个序列号?

SQL SERVER 2012 SEQUENCE

怎么在sql servler2000中建立一个序列,用sequence写的

SQL Server 中的 NEXT VALUE FOR @Sequence 的工作方式是不是与 C# 中的 Interlocked.Increment() 相同? [复制]

无法从 SQL Server 中的 CURRENT_TIMESTAMP 获取秒数

SQL Server 2012 - 使用 LAG 从以前的行中获取数据