0

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

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

16050

16052

41817

48255

现在我需要为这些产品中的每一个(可能有 1 个,可能有 1000 个,我不知道)来检查整个条件列表:特定字段是否 = '简单'?如果是这样,请执行一堆其他查询并确保一切正常如果不是“简单”,则运行另一组查询并确保信息都很好。

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

我需要使用光标吗?有没有其他方法可以做我没有看到的我需要的事情?

谢谢,莱斯利

4

2 回答 2

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
于 2013-08-01T15:10:46.173 回答
0

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

例如:

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

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

于 2013-08-02T13:21:05.750 回答