如何在if子句中设置输出语句的值



我的存储过程中有这段代码

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[VerifyBasketIdToUse_DBO]
@Basket_IDD INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
IF (SELECT MAX(Basket_Id) FROM [Order]) = (SELECT MAX(Basket_Id) FROM [Order] WHERE Order_PayState=1)
EXEC DBO.InsertBasket_DBO
SET @Basket_IDD = @Basket_Id OUTPUT
ELSE
SET @Basket_IDD = (SELECT MAX(Basket_Id)FROM [Order])
SELECT @Basket_IDD
END

这一个用于具有输出值的SP

ALTER PROCEDURE [dbo].[InsertBasket_DBO]
@Basket_Id INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[Basket]([Basket_Amount])
OUTPUT inserted.Basket_Id
values (0)
END

但是SqlServer注意到我在第二个存储过程中的@Basket_Id OUTPUT没有在第一个存储过程定义,我不明白为什么?有人能帮我吗?

ALTER PROCEDURE [dbo].[VerifyBasketIdToUse_DBO]
@Basket_IDD INT OUTPUT
AS
BEGIN
IF (SELECT MAX(Basket_Id) FROM [Order]) = (SELECT MAX(Basket_Id) FROM [Order] WHERE Order_PayState=1)
BEGIN
EXEC @Basket_IDD = dbo.InsertBasket_DBO
END
ELSE
BEGIN
SET @Basket_IDD = (SELECT MAX(Basket_Id)FROM [Order])
END
SELECT @Basket_IDD
END

在第一个过程中,而不是

EXEC DBO.InsertBasket_DBO
SET @Basket_IDD = @Basket_Id OUTPUT

使用

EXEC DBO.InsertBasket_DBO @Basket_IDD OUTPUT

在第二个步骤中,更换

INSERT INTO [dbo].[Basket]([Basket_Amount])
OUTPUT inserted.Basket_Id
values (0)

带有

INSERT INTO [dbo].[Basket]([Basket_Amount])
values (0)
select @Basket_Id = scope_identity()

我现在不能检查语法和结果,但我希望这能给你一些指导:(

最新更新