我有一个嵌套游标,其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)
还是有更好的技术?
答案 0 :(得分:2)
我添加了评论,但是,会重做答案中的选择,以便我可以使用代码格式化来使其更清晰。
insert statement (myrecord)
select myrecord
from mytable where myrecord = @id
答案 1 :(得分:1)
它应该像你展示的那样工作。正如其他人所说,光标似乎没必要。
您可以尝试在OPEN语句后检查@@CURSOR_ROWS。作为替代方案,它可能是返回行,但出乎意料的是,MyRecord列是null还是其他一些意外值?