如果没有返回记录,如何避免执行游标语句

时间:2011-04-13 09:00:49

标签: sql-server sql-server-2008 cursor fetch

我有一个嵌套游标,其select语句有时会返回0条记录。

游标执行insert语句。

如果查询返回0条记录,我希望不执行insert语句。但无论如何它都会被执行。你能否建议避免这种情况?

    declare  nested_cursor CURSOR 
    FOR 
    SELECT MyRECORD 

    FROM MyTable
    WHERE MyRECORD = @ID -- @ID is a variable defined in the main cursor
    -- for some values of @iD ht above select statement may return zero records
    OPEN nested_cursor
    FETCH NEXT FROM nested_cursor INTO @NestedID
    WHILE (@@fetch_status = 0)
    BEGIN  


        INSERT STATEMENT  -- HERE I HAVE THE PROBLEM , why this executes?                 
        FETCH NEXT FROM nested_cursor INTO @NestedID
    END
    CLOSE nested_cursor
    DEALLOCATE nested_cursor

更新:我通过在INSERT语句之前检查@NestedId是否为空来找到解决方法。

你建议做什么?添加此检查

WHILE (@@fetch_status = 0) and (@NestedID is not null)

还是有更好的技术?

2 个答案:

答案 0 :(得分:2)

我添加了评论,但是,会重做答案中的选择,以便我可以使用代码格式化来使其更清晰。

insert statement (myrecord) 
select myrecord 
from mytable where myrecord = @id

答案 1 :(得分:1)

它应该像你展示的那样工作。正如其他人所说,光标似乎没必要。

您可以尝试在OPEN语句后检查@@CURSOR_ROWS。作为替代方案,它可能是返回行,但出乎意料的是,MyRecord列是null还是其他一些意外值?