我正在重构一个存储过程,该存储过程使用本地游标迭代名为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循环的所有内容,如果相反,它将执行其他操作?或者是另一种方法可以做到这一点?任何想法和例子将非常感谢。
谢谢。
答案 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