我正在用Server编写一个存储过程,它插入并应该显示插入记录的id,但是当我使用@@IDENTITY、SCOPE_IDENTITY()或IDENT_CURRENT时,它返回null。
表结构:
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)
);存储过程:
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

发布于 2021-11-29 02:13:35
由于您使用的是SEQUENCE作为IdFactura列的缺省值,所以您将无法使用@@IDENTITY、SCOPE_IDENTITY()或IDENT_CURRENT。相反,您需要对OUTPUT命令使用INSERT子句。
我改变了你的程序,以配合你想要达到的目标。
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使用您的样本:
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:重要的是要注意,您正在尝试使用过程的返回值。查看一下使用返回代码返回数据的文档。
https://stackoverflow.com/questions/70142977
复制相似问题