Хранимая процедура возвращает значение NULL при вставке новой строки - PullRequest
0 голосов
/ 01 октября 2019

Я вставляю строку в таблицу, используя хранимую процедуру в 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 голосов
/ 01 октября 2019

Сначала создайте столбец идентификаторов в своей таблице, чтобы получить ваш 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...