T-SQL - 如果循环游标并同时插入表中会发生什么?

时间:2015-02-18 17:44:33

标签: sql sql-server tsql cursor

考虑一下。我有一个名为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中。已经运行的游标会获取这个新的插入值并迭代它吗?或者在游标执行结束时,光标不会处理新插入的值?

1 个答案:

答案 0 :(得分:1)

我非常确定游标的默认选项是DYNAMIC,因此对基础数据的修改会反映在游标中。如果您想要特定的行为,请明确说明它而不是依赖于默认行为,例如

DECLARE A CURSOR LOCAL STATIC FAST_FORWARD 
FOR... 

您可以使用以下方式检查声明后的属性:

SELECT properties 
FROM sys.dm_exec_cursors(@@spid);

听起来你想要在光标打开时获取数据的快照,因此你应该使用静态光标。