我有一个SQL Server游标。当特定条件出现时,我想跳过循环的一次迭代。Break会将您带出光标循环,而continue似乎不会执行任何操作。
是否有一个命令说“嘿,这个记录不好,所以让我们跳过它,继续下一个”。
顺便说一句,我知道光标是邪恶的,就像在过路车道上以每小时43英里的速度行驶的司机一样,但就像在软件中经常发生的那样,我被它卡住了。
谢谢
发布于 2009-07-24 17:51:46
为什么不直接使用if语句:
IF 'condition exists that I want to update'
BEGIN
....
END
Fetch Next发布于 2009-07-24 17:49:32
如果你用fetch在循环的底部编写代码(在循环之前使用初始的fetch ),继续会跳到顶部,并再次处理相同的行。你可以使用GOTO跳转到底部的fetch部分,或者重新构造循环以在顶部获取,cointinue就可以工作了。
你可以修改你的循环来使用GOTO...
...
...
if <condition>
BEGIN
GOTO Fetch_Next
END
....
....
Fetch_Next:
FETCH NEXT FROM ...以下是一些示例代码,仅用于循环顶部的一次fetch,continue将起作用:
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>发布于 2009-07-24 17:48:39
如果我们知道游标代码是什么样子,回答这个问题可能会更容易。也许您可以放入一个if语句,该语句检查条件,并仅在条件不存在时执行某些操作。
https://stackoverflow.com/questions/1179115
复制相似问题