我有一个嵌套的游标,它的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列是空的,或其他一些意外的值?