首页 > 解决方案 > 执行 SQL Server 存储过程

问题描述

我很困惑为什么这不执行第二个 else if 语句。我只需要在没有提供 First_name 和 Surname 但有 Age 时运行该语句。它运行第一个 if 语句,但不运行第二部分。

这是代码

ALTER PROCEDURE [PEOPLE]
(
    @AGE int,
    @SURNAME nvarchar(10),
    @FIRST_NAME nvarchar(10)
)
AS
BEGIN   
    IF(@SURNAME IS NOT NULL AND @FIRST_NAME IS NOT NULL)
        BEGIN
            SELECT * 
            FROM MEMBERS
            WHERE Is_Active = 1
            AND (FIRST_NAME = @FIRST_NAME AND SURNAME=@SURNAME)
        END     
        
        -- This else statement isn't being executed :-(
        ELSE IF(@AGE <> -1 AND @FIRST_NAME='' AND @SURNAME='')
            BEGIN
                SELECT *
                FROM MEMBERS
                WHERE(AGE = @AGE)
            END         
    END

这是我执行它的方式:

exec [PEOPLE] @AGE=24, @FIRST_NAME='', @SURNAME=''

如果有人可以提供帮助,我将不胜感激。谢谢

标签: sqlsql-server

解决方案


ELSE IF实际上, 要求两者且不@FIRST_NAME@SURNAME空,这在 中已经满足IF

您可能需要ELSE IF像这样重写:

 ELSE IF(@AGE <> -1 AND (@FIRST_NAME IS NULL OR @FIRST_NAME='') AND (@SURNAME IS NULL OR @SURNAME=''))

推荐阅读