在游标内循环以查找我必须“从”游标中“获取下一个”的次数

Looping within a cursor to find the number of times I have to "fetch next from" cursor

提问人:nibblebytes07 提问时间:11/25/2022 最后编辑:marc_snibblebytes07 更新时间:11/25/2022 访问量:144

问:

我有这样的记录,我必须一行一行地走。因此,为此,我使用游标并获取下一个光标。

V-18244            -- beginning of order 1
Mill               -- data belonging to order 1
W/L-1285           -- data belonging to order 1
V-18264            -- beginning of order 2
Mill               -- data belonging to order 2
S-18247            -- beginning of order 3
Mill               -- data belonging to order 3
W/L-1285           -- data belonging to order 3

我用这个

IF PATINDEX('_-[0-9]%',@ITEM1) >0

以标识订单的开头。现在我需要转到第一个订单的第 #2 行和第 #3 行来获取数据。 所以我必须获取下一个光标两次。但是对于第二个订单,我只需要获取一次光标。我该如何解决这个问题?

我的想法是在“while @@FETCH_STATUS = 0”循环中使用一个循环,但这不起作用

示例代码:

while @@FETCH_STATUS = 0

BEGIN
    IF PATINDEX('_-[0-9]%',@ITEM1) >0        ----identify order 1

        BEGIN
            SELECT @ITEM1
                        ---a loop to keep fetching until I find the second order?
            begin
                fetch next from po_cursor into @Item1, @Item2, @Item3
                set @var= @var+1
                SELECT @ITEM1 ,'AFTERFETCH',@var 
            END
            set @var=0
                 END
END
sql sql server while-loop 数据库游标

评论

1赞 Thom A 11/25/2022
为什么要使用一个而不是一个基于集合的解决方案?CURSOR
3赞 Stu 11/25/2022
我必须一排一排地走——几乎可以肯定你没有;显示一些适当的示例数据,并准确解释您要执行的操作。
0赞 nibblebytes07 11/25/2022
@Larnu:团队一直遵循与订单处理相关的所有存储过程的此规范。这只是一个例外情况,所以我仍在寻找基于光标的解决方案。
6赞 John Cappelletti 11/25/2022
“团队一直遵循这个规范”线性思维......随它去吧。
0赞 Stu 11/25/2022
该团队一直遵循所有存储过程的这一规范 - 只是说,Microsoft SQL Server在性能方面是领先的RDBMS之一,在某些基准测试中与Oracle相当甚至超过Oracle,并且比MySql和Postgres性能高出3个数量级。如果您遇到这种情况,我会感到惊讶,但是如果您默认以 RBAR 方式工作。

答: 暂无答案