考虑一下。我有一个名为dbo.Event的表。
我为它声明了一个游标:
declare myCur cursor for
select a from dbo.event
然后我:
open myCur
fetch next from myCur into @temp
while @@fetschstatus = 0
...
do the job using fetched value
...
fetch next from myCur into @temp
end
问题是 - myCur需要一些时间来遍历光标触发时我们在表中所有可用值。当光标运行时会发生什么但是插入发生在dbo.Event中。已经运行的游标会获取这个新的插入值并迭代它吗?或者在游标执行结束时,光标不会处理新插入的值?
答案 0 :(得分:1)
我非常确定游标的默认选项是DYNAMIC,因此对基础数据的修改会反映在游标中。如果您想要特定的行为,请明确说明它而不是依赖于默认行为,例如
DECLARE A CURSOR LOCAL STATIC FAST_FORWARD
FOR...
您可以使用以下方式检查声明后的属性:
SELECT properties
FROM sys.dm_exec_cursors(@@spid);
听起来你想要在光标打开时获取数据的快照,因此你应该使用静态光标。