获取序列当前值

Posted

技术标签:

【中文标题】获取序列当前值【英文标题】:Get Sequence Current Value 【发布时间】:2019-05-04 16:13:28 【问题描述】:

我在我的数据库服务器上创建了一个序列,用于生成寄存器和每个寄存器的详细信息。我必须在生成的那一刻创建一个包含该详细信息的普通文档,所以我必须检索序列的当前值(而不是 NEXT)

我正在生成一个查询以获取所需数据,但我需要(如我所说)获取序列的当前值

-- 这是我的序列:

CREATE SEQUENCE [dbo].[GuiaRemisionID] 
AS [int]
START WITH 1000
INCREMENT BY 1
MINVALUE -2147483648
MAXVALUE 2147483647
CACHE 
GO

--这是我检索数据的SP

CREATE PROCEDURE [dbo].[CAJAS_CONS_GUIAREMISION]
AS 
BEGIN 
    DECLARE @ID_GUIAREMISION INT 
    select @ID_GUIAREMISION = current_value FROM sys.sequences WHERE name = 'GuiaRemisionId' ;
    SELECT 
    T1.ID_GUIAREMISION, T1.CLIENTE_CODIGO, T1.USUARIO, T1.FECHA_GUIA, T1.TIPO,
    T2.CAJA_CODIGO, T2.CAJA_NUMERO, T2.ITEM,  
    T2.UBICACION_COORD1,
    T2.UBICACION_COORD2, T2.UBICACION_COORD3, T2.UBICACION_COORD4,
    T2.UBICACION_COORD5, T2.UBICACION_COORD6, T2.DEPARTAMENTO
    FROM GUIAS_REMISION T1, GUIAS_REMISION_DETALLE T2
    WHERE T1.ID_GUIAREMISION = T2.ID_GUIAREMISION
    AND T1.ID_GUIAREMISION = @ID_GUIAREMISION

END

但我的问题是:“不允许将数据类型 sql_variant 隐式转换为 int”

如何获取序列的当前值? 我应该使用:从我的表中选择 max (id_guiaRemision) 吗? (似乎效率不高) 拜托了,希望有人能帮帮我。

最好的问候

【问题讨论】:

首先使用旧式连接。 T1.ID_GUIAREMISION 的数据类型是什么?你不想SELECT NEXT VALUE FOR GuiaRemisionId吗? 谢谢Sami,数据类型是INT 我不理解您对需要的解释。对我来说,这听起来像是一个潜在的竞争条件。 【参考方案1】:

你能试试这个吗?

SELECT
Cast(ISNULL(seq.current_value,N'''') as INT) AS [Current Value]
FROM
sys.sequences AS seq where seq.name = 'GuiaRemisionID'

【讨论】:

非常感谢 Thanh ngo,它成功了,所以我可以在同一个命令上获取当前值...我想我可以将它用于我的代码,无论如何如果我有任何问题我会让你知道谢谢大家

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

从 SQL Server SEQUENCE 获取当前值

oracle 如何返回当前序列值 比如我insert语句过后立刻要获取当前insert结果的序列值,怎么做,求救......

怎样在oracle中取出当前序列值

oracle如何查询当前用户都有哪些序列?

在模型序列化器中获取当前用户

如何检索 oracle 序列的当前值而不增加它?