我正在 SQL Server 中撰寫一個存盤程序,該程序插入并應顯示id插入記錄的 ,但是當我使用時@@IDENTITY,SCOPE_IDENTITY()或者IDENT_CURRENT它回傳空值。
表結構:
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

uj5u.com熱心網友回復:
由于您使用 aSEQUENCE作為 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://www.uj5u.com/ruanti/369116.html
標籤:sql sql-server
上一篇:SQLServer中的遞回乘法
