使用SPROC SQL输出的IF语句

时间:2018-12-05 14:18:30

标签: sql-server tsql if-statement stored-procedures

我正在创建存储过程(存储过程)以对数据库中的表执行操作。我有一个存储过程SubjectExists,如果输入的主题名称在主题表中,则返回“ 1”,如果不存在则返回“ 0”。 创建过程SubjectExists @SubjName varhcar(20) 如 存在时选择案例( 选择 * 来自主题 主题名称= @SubjName ) THEN CAST(1位) ELSE CAST(0 AS BIT) 结束 我现在正在制作另一个从表中删除主题的存储库。我想使此存储过程使其使用SubjectExists,并且如果其输出为1(即该主题确实存在),则它将删除该主题,并且如果SubjectExists的输出为0,则不执行任何操作。 我将如何去做呢? 我已经尝试过以下方法,但到目前为止还没有运气。 创建过程DeleteSubject @SubjName varchar(20) 如 如果(EXEC StudentExists Bob) 从主题中删除 WHERE Subject_Name = @SubjName; 谁能指导我如何做到这一点。 谢谢

2 个答案:

答案 0 :(得分:0)

您需要像这样的存储过程获取返回值-

DECLARE @returnvalue INT

 EXEC @returnvalue = StudentExists Bob

然后您就可以满足If条件了。

答案 1 :(得分:0)

首先,您的存储过程应返回值:

CREATE PROCEDURE SubjectExists @SubjName varchar(20)
AS
    BEGIN
    DECLARE @ReturnValue int

    SELECT @ReturnValue = CASE WHEN EXISTS(
        SELECT *
        FROM Subject 
        WHERE Subject_Name = @SubjName
        )
        THEN CAST (1 AS BIT)
        ELSE CAST (0 AS BIT)
        END

    RETURN @ReturnValue
    END

然后,您可以声明一些表来存储存储过程的结果,如果符合条件,则运行代码

DECLARE @FooValue int;
EXEC  @FooValue = SubjectExists 'helloWorld!:)' 

IF  @FooValue = 1
    BEGIN
        DELETE FROM Subject 
        WHERE Subject_Name = @SubjName;
    END