SQL:如果@@ fetch_status = -1,如何添加if到while循环

时间:2017-01-11 20:29:47

标签: sql-server tsql stored-procedures while-loop

我正在重构一个存储过程,该存储过程使用本地游标迭代名为productagg的表的每个记录,并执行特定于该表中记录的各种操作。

只要表中有记录,就会执行此循环,这将返回非-1状态。

我需要添加一个场景,在循环内部或外部,我需要在productagg表中没有记录时执行相同的操作集。在这种情况下,我只想对所有产品执行操作。

以下是存储过程的基本当前结构:

DECLARE productagg_cursor CURSOR LOCAL
FOR SELECT                      
     [ProductID]
    ,[MaxItems]
    ,[RegionID]                         
    FROM [dbo].[ProductAgg]
    WHERE [ProductAggID] IS NOT NULL;

OPEN productagg_cursor;     

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; -- TURN IT ON

FETCH NEXT  FROM productagg_cursor 
INTO 
        @ProductAggID
,       @MaxItems
,       @RegionID;

WHILE @@FETCH_STATUS <> -1


    In here the operations based on the record that set the cursor id value happen.



    FETCH NEXT FROM productagg_cursor INTO 
            @ProductAggID
    ,       @MaxItems
    ,       @RegionID;

END; -- END WHILE 

SET TRANSACTION ISOLATION LEVEL READ COMMITTED; -- TURN IT OFF

CLOSE productagg_cursor;

DEALLOCATE productagg_cursor;   

我的请求是执行基于 productaggid 的相同操作,就好像productagg表中没有指定产品一样。将对所有产品执行操作,而不仅仅是从productagg表执行操作。

将此部分添加为If语句,以检查productagg表的返回是否为&gt; 0如果是,那么它执行包含光标和while循环的所有内容,如果相反,它将执行其他操作?或者是另一种方法可以做到这一点?任何想法和例子将非常感谢。

谢谢。

1 个答案:

答案 0 :(得分:0)

您是否正在寻找具有单独代码的类似内容?

if @@FETCH_STATUS = -1
begin
   print 'No Rows'
end
else while @@FETCH_STATUS <> -1
begin
   print 'Rows'
   -- fetch next
end

或者像这样,无论如何都执行相同的代码块?

while 1=1
begin
   -- do something whether or not there is data
   if @@FETCH_STATUS = -1 break
   -- fetch next
   if @@FETCH_STATUS = -1 break
end