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



我正在重构一个存储过程,该过程使用本地游标迭代名为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表的返回是否大于0。如果是,那么它将执行包括游标和while循环的所有内容,如果相反,它将执行else?或者是另一种方法可以做到这一点?任何想法和例子都将不胜感激。

谢谢。

您是否正在寻找这样的东西,其中有单独的代码?

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

最新更新