首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IDENT_CURRENT返回空

IDENT_CURRENT返回空
EN

Stack Overflow用户
提问于 2021-11-28 11:33:17
回答 1查看 217关注 0票数 0

我正在用Server编写一个存储过程,它插入并应该显示插入记录的id,但是当我使用@@IDENTITYSCOPE_IDENTITY()IDENT_CURRENT时,它返回null。

表结构:

代码语言:javascript
复制
CREATE SEQUENCE Idfac
    START WITH 2000
    INCREMENT BY 1;
GO

CREATE TABLE Factura
(
    idFactura [int] PRIMARY KEY NOT NULL DEFAULT (NEXT VALUE FOR Idfac),
    Nombre_sucursal [varchar](20) NOT NULL,
    Nombre_cliente [varchar](100) NOT NULL,
    Numero_factura [varchar](10) NOT NULL,
    Fecha Datetime,
    Subtotal DECIMAL(18, 2) ,
    IGV AS CAST(Subtotal * 0.18 AS decimal(18,2)),
    Total DECIMAL(18, 2) ,

    CONSTRAINT chk_Subtotal 
        CHECK(Subtotal IS NULL OR Subtotal <> 0),
    CONSTRAINT chk_total 
        CHECK (Total IS NULL OR Total <> 0) 
);

存储过程:

代码语言:javascript
复制
CREATE 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)
    VALUES (@Nombre_sucursal, @Nombre_cliente, @Numero_factura, @Fecha, @Subtotal, @Subtotal * 0.18 + @Subtotal)

    SELECT IDENT_CURRENT('Factura') AS Result;
END

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-29 02:13:35

由于您使用的是SEQUENCE作为IdFactura列的缺省值,所以您将无法使用@@IDENTITYSCOPE_IDENTITY()IDENT_CURRENT。相反,您需要对OUTPUT命令使用INSERT子句。

我改变了你的程序,以配合你想要达到的目标。

代码语言:javascript
复制
CREATE PROCEDURE USP_RegistrarFactura
    @Nombre_sucursal varchar(20),
    @Nombre_cliente varchar(100),
    @Numero_factura varchar(10),
    @Fecha Datetime,
    @Subtotal DECIMAL(18, 2)
AS
BEGIN  
    DECLARE @ReturnTable TABLE (
        [Return] INT);
    INSERT INTO Factura (Nombre_sucursal, Nombre_cliente, Numero_factura, Fecha, Subtotal, total)
    OUTPUT Inserted.idFactura INTO @ReturnTable
    VALUES (@Nombre_sucursal, @Nombre_cliente, @Numero_factura, @Fecha, @Subtotal, @Subtotal * 0.18 + @Subtotal)

    RETURN(SELECT [Return] FROM @ReturnTable)
END

使用您的样本:

代码语言:javascript
复制
DECLARE @return_value INT
EXEC @return_value = [dbo].[USP_RegistrarFactura]
     @Nombre_sucursal = N'La Molina',
     @Nombre_cliente = N'Mario',
     @Numero_factura = N'001230036',
     @Fecha = N'2021-11-10',
     @Subtotal = 150

SELECT 'Return Value' = @Return_value

结果如下:

PS:重要的是要注意,您正在尝试使用过程的返回值。查看一下使用返回代码返回数据的文档。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70142977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档