首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL Server如何在发生特定条件时遍历游标循环一次

SQL Server如何在发生特定条件时遍历游标循环一次
EN

Stack Overflow用户
提问于 2009-07-24 17:45:42
回答 5查看 19K关注 0票数 8

我有一个SQL Server游标。当特定条件出现时,我想跳过循环的一次迭代。Break会将您带出光标循环,而continue似乎不会执行任何操作。

是否有一个命令说“嘿,这个记录不好,所以让我们跳过它,继续下一个”。

顺便说一句,我知道光标是邪恶的,就像在过路车道上以每小时43英里的速度行驶的司机一样,但就像在软件中经常发生的那样,我被它卡住了。

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-07-24 17:51:46

为什么不直接使用if语句:

代码语言:javascript
运行
复制
IF 'condition exists that I want to update'
BEGIN

....

END

Fetch Next
票数 8
EN

Stack Overflow用户

发布于 2009-07-24 17:49:32

如果你用fetch在循环的底部编写代码(在循环之前使用初始的fetch ),继续会跳到顶部,并再次处理相同的行。你可以使用GOTO跳转到底部的fetch部分,或者重新构造循环以在顶部获取,cointinue就可以工作了。

你可以修改你的循环来使用GOTO...

代码语言:javascript
运行
复制
...
...
if <condition>
BEGIN
    GOTO Fetch_Next
END
....
....
Fetch_Next:
FETCH NEXT FROM ...

以下是一些示例代码,仅用于循环顶部的一次fetch,continue将起作用:

代码语言:javascript
运行
复制
DECLARE <cursor_name> CURSOR FOR
    SELECT
    FROM
    WHERE
    FOR READ ONLY

--populate and allocate resources to the cursor
OPEN <cursor_name>

--process each row
WHILE 1=1
BEGIN

    FETCH NEXT FROM <cursor_name>
        INTO @a, @b, @c

    --finished fetching all rows?
    IF @@FETCH_STATUS <> 0
    BEGIN --YES, all done fetching
        --exit the loop
        BREAK
    END --IF finished fetching

    --do something here--
    --do something here--

    IF <your condition>
    BEGIN
        CONTINUE  -- fetch next row
    END

    --do something here--
    --do something here--

END --WHILE

--close and free the cursor's resources
CLOSE <cursor_name>
DEALLOCATE <cursor_name>
票数 12
EN

Stack Overflow用户

发布于 2009-07-24 17:48:39

如果我们知道游标代码是什么样子,回答这个问题可能会更容易。也许您可以放入一个if语句,该语句检查条件,并仅在条件不存在时执行某些操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1179115

复制
相关文章

相似问题

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