首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行SQL Server存储过程

问执行SQL Server存储过程
EN

Stack Overflow用户
提问于 2020-12-17 02:47:08
回答 2查看 48关注 0票数 0

我很困惑为什么这没有执行第二个else if语句。我只需要在没有提供First_name和姓氏但有年龄的情况下运行语句。它运行第一个if语句,但不运行第二部分。

以下是代码

代码语言:javascript
复制
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

下面是我是如何执行它的:

代码语言:javascript
复制
exec [PEOPLE] @AGE=24, @FIRST_NAME='', @SURNAME=''

如果有人能帮上忙,我将不胜感激。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-17 02:52:09

ELSE IF要求@FIRST_NAME和@SURNAME都不能为null,这在IF中已经得到了满足。

您可能需要重写ELSE IF,如下所示:

代码语言:javascript
复制
 ELSE IF(@AGE <> -1 AND (@FIRST_NAME IS NULL OR @FIRST_NAME='') AND (@SURNAME IS NULL OR @SURNAME=''))
票数 2
EN

Stack Overflow用户

发布于 2020-12-17 03:28:56

试试这个:

代码语言:javascript
复制
ALTER PROCEDURE [PEOPLE]
(
    @AGE int,
    @SURNAME nvarchar(10),
    @FIRST_NAME nvarchar(10)
)
AS
BEGIN   
  SELECT * 
  FROM MEMBERS
  WHERE
    (
       (IsNull(@FIRST_NAME, '') <> '') AND
       (IsNull(@SURNAME, '') <> '') AND
        FIRST_NAME = IsNull(@FIRST_NAME, '') AND
        SURNAME = IsNull(@SURNAME, '') AND
        Is_Active = 1
    )
    OR
    (
      @AGE <> -1 AND
      (IsNull(@FIRST_NAME, '') = '') AND
      (IsNull(@SURNAME, '') = '') AND
      (AGE = @AGE)
    )
END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65329317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档