存储过程在插入新行时返回NULL输出值

时间:2019-10-01 00:24:36

标签: sql-server stored-procedures

我正在使用SQL Server中的存储过程在表中插入一行,并要求它返回scope_identity(),但返回的是NULL值?那么,如何获得正确的价值?

ALTER PROCEDURE SALES.AddDiscount
    @Description NVARCHAR(255),
    @DiscountPct SMALLMONEY,
    @Type NVARCHAR(50),
    @Category NVARCHAR(50),
    @StartDate DATETIME,
    @EndDate DATETIME,
    @MinQty INT,
    @MaxQty INT,
    @NewProductID INT OUT
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO SALES.SpecialOffer 
    VALUES (@Description, @DiscountPct, @Type, @Category, @StartDate, @EndDate,      @MinQty, @MaxQty);

    SELECT SCOPE_IDENTITY() AS scopeIdentity    
END

DECLARE @productnewid INT

EXECUTE SALES.AddDiscount 'THIS IS SQL SERVER',  1234,  'D',  'E',  '1989-01-01', '1989-12-29' , 5 , 10, @productnewid OUT

1 个答案:

答案 0 :(得分:0)

首先是在您的表上创建一个标识列以获取您的scope_identity()

[id] [int] IDENTITY(1,1) NOT NULL,

scope_identity()

中分配输出变量
SELECT @NewProductID = SCOPE_IDENTITY() 


BEGIN
    SET NOCOUNT ON;
    INSERT INTO SALES.SpecialOffer VALUES( @Description, @DiscountPct,  @Type,      @Category,  @StartDate,  @EndDate,      @MinQty, @MaxQty);
    SELECT @NewProductID = SCOPE_IDENTITY() 
    RETURN
END

测试:

DECLARE @productnewid INT
EXECUTE SALES.AddDiscount 'THIS IS SQL SERVER',  1234,  'D',  'E',  '1989-01-01', '1989-12-29' , 5 , 10, @productnewid OUT
SELECT @productnewid