gpt4 book ai didi

sql-server - SQL Server 当特定条件发生时如何迭代游标循环一次

转载 作者:行者123 更新时间:2023-12-02 14:30:14 25 4
gpt4 key购买 nike

我有一个 SQL Server 游标。当特定条件发生时,我想跳过循环的一次迭代。 Break 使您退出光标循环,而 continue 似乎没有执行任何操作。

是否有一个命令说“嘿,这条记录不好,所以继续跳过它并处理下一条”。

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

谢谢

最佳答案

如果您使用底部的获取来编写循环(在循环之前使用初始获取),则 continue 只会跳到顶部,并再次处理同一行。您可以使用 GOTO 跳转到底部的获取部分或重构循环以在顶部获取,并且继续将工作。

您可以修改循环以使用 GOTO...

...
...
if <condition>
BEGIN
GOTO Fetch_Next
END
....
....
Fetch_Next:
FETCH NEXT FROM ...

这里是一些示例代码,仅在循环顶部进行一次提取,继续即可:

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>

关于sql-server - SQL Server 当特定条件发生时如何迭代游标循环一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1179115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com