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



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

游标执行插入语句。

我希望如果查询返回0条记录,则不执行插入语句。但不管怎样,它还是被执行了。你能建议一个避免这种情况的方法吗?

    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

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

你有什么建议?在

中添加此检查
WHILE (@@fetch_status = 0) and (@NestedID is not null)

还是有更好的技术?

我添加了一个注释,但是,将在答案中重新选择,以便我可以使用代码格式使其更清晰。

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

它应该像您所展示的那样工作。正如其他人所说,游标似乎是不必要的。

您可以尝试在OPEN语句之后检查@@CURSOR_ROWS。作为另一种选择,也许它正在返回行,但意外地,MyRecord列是空的,或其他一些意外的值?

相关内容

  • 没有找到相关文章

最新更新