【问题标题】:Trying to use break inside a while loop尝试在while循环中使用break
【发布时间】:2015-09-22 17:42:15
【问题描述】:

我正在尝试的是在打印语句时满足条件(如果不存在块)退出循环; else 继续 while 循环。我收到语法错误:

关键字“ELSE”附近的语法不正确。

这里是sn-p的代码:

WHILE @currentrow < @rows
BEGIN
SET @currentrow = @currentrow + 1

SELECT @selectcol = sysid
FROM @TableVar
WHERE id = @currentrow

SELECT @sysid =  @selectcol 

IF NOT EXISTS (
SELECT field_id
FROM fields
WHERE sys_id = @sysid
    AND NAME = @field_name
)
 PRINT cast(@field_name AS VARCHAR) + ' not found in the       business area ' + cast(@sysid AS VARCHAR)

BREAK

ELSE

CONTINUE

[While loop continues]

【问题讨论】:

  • “似乎是语法错误”?具体来说,错误信息是什么?请使用此信息更新您的问题。
  • 已更新。问题在于 else 的位置
  • 我不确定我是否理解这个逻辑 - 要么这个 IF 块出现在循环体的末尾(在这种情况下 CONTINUE 毫无意义 - 这就是循环要做的事情无论如何)或循环的其余部分无法访问(因为您总是BREAKCONTINUE)。
  • @Damien_The_Unbeliever 结果是 break 和 continue 并没有像我想象的那样工作。你是对的,如果我使用它,我的 while 循环的其余部分将无法访问。

标签: sql-server


【解决方案1】:

最后你需要一个END 关键字:

WHILE @currentrow < @rows
    BEGIN
        SET @currentrow = @currentrow + 1

        SELECT @selectcol = sysid
        FROM @TableVar
        WHERE id = @currentrow

        SELECT @sysid =  @selectcol 

        IF NOT EXISTS (SELECT field_id FROM fields WHERE sys_id = @sysid AND NAME = @field_name)
            BEGIN
                PRINT CAST(@field_name AS VARCHAR) + ' not found in the business area ' + CAST(@sysid AS VARCHAR)
                BREAK
            END
        ELSE
            BEGIN
                CONTINUE
            END
    END

为避免逻辑流程中出现此类错误,请有效地使用空格来清楚地查看开始和结束语句的位置。

【讨论】:

  • 我已经用错误消息编辑了我的问题。这不是END关键字的问题,我刚刚发布了一个sn-p。 while 循环应该在之后“继续”。
  • 它会一直持续到你在WHILE循环声明中的表达式为假...
  • 我已经编辑了我的答案,如果你再次卡住,我会遵循 BOL 语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多