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

T-SQL - what happens if am looping through cursor and at the same time an insert into the table happens?

考虑一下。我有一个名为 dbo.Event 的 table。

我为它声明了一个游标:

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 需要一些时间来遍历光标触发时我们在 table 中拥有的所有可用值。当光标到达 运行 但插入发生在 dbo.Event 时会发生什么。 运行 游标是否已经拾取这个新插入的值并对其进行迭代?或者在游标执行结束时新插入的值不会被游标处理?

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

DECLARE A CURSOR LOCAL STATIC FAST_FORWARD 
FOR... 

您可以在声明后使用以下方法检查属性:

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

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