问题描述
|
我实际上使用的是带有两个游标的错误设计(我知道它,但是随后的任务很简单,因此我不必理会优化)。我正在使用这样的查询:
DECLARE cursor1 CURSOR FAST_FORWARD FOR
SELECT DISTINCT name FROM #NameMeta;
OPEN cursor1;
FETCH NEXT FROM cursor1 INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE cursor2 CURSOR FAST_FORWARD FOR
SELECT DISTINCT place FROM #PlaceMeta;
OPEN cursor2;
FETCH NEXT FROM cursor2 INTO @place
WHILE @@FETCH_STATUS = 0
BEGIN
...
...
...
...
在我真正单击“ 1”按钮之前,我非常确定此查询是错误的,并且会因错误而退出。从我的角度来看,有两个@@FETCH_STATUS
被使用。因此,除非在打开新游标之前将第一个2的状态保存在堆栈中的某个位置,否则此查询将不起作用。
有人可以告诉我该查询的工作原理吗?我的主要问题是要对ѭ2进行多次比较检查。我手动验证了一些结果,但是不确定在极端情况下该操作是否会失败,或者查询是否正确,并且SQL Server正在执行其他操作。
解决方法
@@ FETCH_STATUS始终返回最近的FETCH操作的结果。
, 该查询本身可以正常工作。 @@ FETCH_STATUS始终返回最后一个提取语句的状态。由于您的@@ FETCH_STATUS紧随要检查其状态的FETCH语句,因此可以。