我有一个游标发送寻呼机消息,偶尔它会发送重复的消息。语法如下所示:
declare @col1 varchar(255),
@col2 varchar(255)
declare c cursor local for
select column1, column2
from table
where flippity = 'floppity'
open c
fetch from c into @col1, @col2
While @@FETCH_STATUS = 0
begin
sp_do_your_thing @col1, @col2
fetch next from c into @col1, @col2
end
close c
deallocate c
Run Code Online (Sandbox Code Playgroud)
问题:如果我得到重复,可能是提取吗?他们都需要下一个,还是都不需要?
Aar*_*and 11
没有区别,省略NEXT不会以任何方式导致重复或不同的结果。NEXT只是默认行为的显式声明。从语法图:
FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
Run Code Online (Sandbox Code Playgroud)
NEXT不是唯一的选项,大多数其他选项仅适用于某些类型的游标。我很难养成这个习惯,因为我只使用快进、单程、“firehose”游标,但最佳实践是包括NEXT明确。
我会查看查询,因为我怀疑在不涉及游标时它也会返回重复项。或者,无论存储过程在做什么,都让它看起来像是重复的。另一种可能的解释是,如果查询正在使用WITH (NOLOCK)/READUNCOMMITTED并且由于数据移动而您在分配顺序扫描中两次读取同一行。
| 归档时间: |
|
| 查看次数: |
1905 次 |
| 最近记录: |