从SQL Server SEQUENCE获取当前值

Hen*_*bæk 31 t-sql sequence sql-server-2012

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

在此输入图像描述

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

CREATE SEQUENCE [OrderNumberSequence]
    as int
    START WITH 4000
    INCREMENT BY 1
    MINVALUE 0
    NO MAXVALUE
    NO CACHE;
GO
Run Code Online (Sandbox Code Playgroud)

从MSDN尝试过这个SQL - 但结果是每次运行查询时我的数字都会增加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 ;
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*ter 58

您可以选择 current_valuesys.sequences:

SELECT current_value FROM sys.sequences WHERE name = 'OrderNumberSequence' ;
Run Code Online (Sandbox Code Playgroud)

DEMO

  • 对于那些想知道 @BernhardDöbler 在说什么的人,语法是“SELECT CAST(current_value AS int) FROM sys.sequences ...”。 (7认同)