我有一块别人的代码基本上就是这样做的:
declare X cursor static for select * from stuff
open cursor X
fetch next from X
while @@fetch_status = 0
begin
do stuff
fetch next from X
end
fetch first from X
while @@fetch_status = 0
begin
do different stuff
fetch next from X
end
为了解决问题,是的,我知道游标很糟糕/不再流行/等等。我没有写它。我只需要解决它。现在回答问题:
如果底层游标后面的数据在第一个循环和第二个循环之间发生变化,第二个游标循环是否可以看到与第一个游标循环不同的数据?或者静态限定符是否会阻止它?
答案 0 :(得分:3)
光标检索的数据不会改变。记录在案here:
STATIC
定义一个生成的游标 要使用的数据的临时副本 通过光标。所有要求 光标从这里回答 tempdb中的临时表;因此, 对基表进行的修改是 没有反映在返回的数据中 对此游标进行的提取,以及此操作 光标不允许修改。