Return 关键字之前的光标无限循环
Cursor Infinite Loop before Return Keyword
我的存储过程中有这段代码
FETCH NEXT FROM MY_CURSOR into @id
WHILE @@FETCH_STATUS = 0
BEGIN
IF @Res == NULL
BEGIN
SET @Var = false
RETURN;
END
--some other code here
FETCH NEXT FROM MY_CURSOR into @id
END
比如变量@Res为NULL,变量@Var设置为FALSE
然后调用RETURN
关键字,不调用会不会死循环RETURN 关键字之前的 FETCH NEXT?
更新 1:好的,显然当它进入 if-else 块时,控制进入 RETURN 块,控制退出 WHILE 循环。我的目标是在设置 @Var 变量后继续循环。
更新 2:接受了 Gordon Linoff 关于检查空值的回答。
这个逻辑:
IF @Res == NULL
没有达到您的预期。几乎任何与 NULL
returns NULL
的比较——都被视为错误。
正确的逻辑是:
IF @Res IS NULL
也就是说,您可能应该避免在代码中使用游标。您应该了解 SQL 中的 NULL
值。
我的存储过程中有这段代码
FETCH NEXT FROM MY_CURSOR into @id
WHILE @@FETCH_STATUS = 0
BEGIN
IF @Res == NULL
BEGIN
SET @Var = false
RETURN;
END
--some other code here
FETCH NEXT FROM MY_CURSOR into @id
END
比如变量@Res为NULL,变量@Var设置为FALSE
然后调用RETURN
关键字,不调用会不会死循环RETURN 关键字之前的 FETCH NEXT?
更新 1:好的,显然当它进入 if-else 块时,控制进入 RETURN 块,控制退出 WHILE 循环。我的目标是在设置 @Var 变量后继续循环。
更新 2:接受了 Gordon Linoff 关于检查空值的回答。
这个逻辑:
IF @Res == NULL
没有达到您的预期。几乎任何与 NULL
returns NULL
的比较——都被视为错误。
正确的逻辑是:
IF @Res IS NULL
也就是说,您可能应该避免在代码中使用游标。您应该了解 SQL 中的 NULL
值。