我正在重构一个存储过程,该过程使用本地游标迭代名为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