存储过程 - 在没有光标的情况下循环结果

时间:2013-08-01 14:28:27

标签: sql-server loops stored-procedures resultset

到处都是我看到我看到为了循环结果你必须使用光标并且在同一篇文章中有人说游标很糟糕不使用它们(这一直是我的哲学)但现在我被卡住了。我需要遍历结果集!

这是情况。我需要提供一个ProductID列表,它将2种不同的状态设置为特定值。我启动存储过程,运行查找找到符合条件的产品的查询。 所以,现在我有一个我需要在验证过程中运行的ProductID列表:

16050

16052

41817

48255

现在我需要每个产品(可能有1个,可能有1000个,我不知道)来检查整个条件列表: 特定字段='SIMPLE'吗?如果是这样,执行一堆其他查询并确保一切都很好 如果它不是'SIMPLE',那么运行另外一组查询并确保信息都很好。

另一个字段='是'吗?如果是这样,执行一堆其他查询,如果不是,则执行其他查询。

光标是我需要使用的吗?有没有其他方法可以做我需要的东西,我只是没有看到?

谢谢, 莱斯利

2 个答案:

答案 0 :(得分:0)

我最终使用WHILE循环,我可以将每个ProductID传递给一系列检查!!

declare @counter int
declare @productKey varchar(20)

SET @counter = (select COUNT(*) from ##Magento)

while (1=1) 
begin
SET @productKey = (select top 1 ProductKey from ##Magento)
print @productKey;
delete from ##Magento Where ProductKey = @productKey
SET @counter-=1;
  IF (@counter=0) BREAK;

end
go

答案 1 :(得分:0)

如果不了解流程的具体细节,很难说,但有一种方法是创建一个执行逻辑并调用它的函数。

例如:

delete from yourtable
where productid in (select ProductID from FilteredProducts)
and dbo.ShouldBeDeletedFunction(ProductID) = 1

一般来说,游标很糟糕,但总有例外。尝试通过集合而不是单个记录的属性来考虑它们。