You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server存储过程调用IDENT_CURRENT等获取插入ID返回NULL问题

问题根因

你表中的idFactura主键列未使用SQL Server原生的IDENTITY自增属性,是通过自定义序列Idfac的NEXT VALUE FOR语法生成默认值。而@@IDENTITY、SCOPE_IDENTITY()、IDENT_CURRENT三个函数仅支持获取IDENTITY自增列生成的最新值,无法识别序列生成的主键,返回NULL属于正常的预期结果。

最优解决方案

推荐使用INSERT语句的OUTPUT子句直接返回刚插入记录的主键值,该方式不受并发操作影响,准确性最高,修改后的存储过程代码如下:

CREATE OR ALTER PROCEDURE USP_RegistrarFactura
    @Nombre_sucursal varchar(20),
    @Nombre_cliente varchar(100),
    @Numero_factura varchar(10),
    @Fecha Datetime,
    @Subtotal DECIMAL(18, 2) 
AS
BEGIN  
    INSERT INTO Factura (Nombre_sucursal, Nombre_cliente, Numero_factura, Fecha, Subtotal, total)
    OUTPUT inserted.idFactura AS Result
    VALUES (@Nombre_sucursal, @Nombre_cliente, @Numero_factura, @Fecha, @Subtotal, @Subtotal * 1.18)
END

可选解决方案

如果需要提前拿到主键值做后续业务逻辑处理,可以先调用序列获取值,再手动插入到表中:

CREATE OR ALTER PROCEDURE USP_RegistrarFactura
    @Nombre_sucursal varchar(20),
    @Nombre_cliente varchar(100),
    @Numero_factura varchar(10),
    @Fecha Datetime,
    @Subtotal DECIMAL(18, 2) 
AS
BEGIN  
    DECLARE @NewId INT = NEXT VALUE FOR Idfac;

    INSERT INTO Factura (idFactura, Nombre_sucursal, Nombre_cliente, Numero_factura, Fecha, Subtotal, total)
    VALUES (@NewId, @Nombre_sucursal, @Nombre_cliente, @Numero_factura, @Fecha, @Subtotal, @Subtotal * 1.18)

    SELECT @NewId AS Result;
END

内容的提问来源于stack exchange,提问作者douglas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:45:03