2

我想帮助我解决一个我无法理解 msdn 文档的问题。如果我有以下 sql 代码:

declare C1 cursor for select * from tableA
open C1
fetch next from C1 into @a, @b..
while @@fetch_status = 0
 .. do something very time consuming for each row
 fetch next from C1 into @a, @b..
end
close c1

tableA 何时锁定​​更新?在游标声明期间?在打开期间,在获取期间?还是从开到关?

谢谢

4

1 回答 1

1

您正在更新的行将在语句运行时被独占锁定UPDATE。或者,如果您将所有语句都放在一个事务中,那么这些行将被独占锁定,直到事务提交(或回滚)

默认情况下,SQL Server 使用行级锁定。但是,如果您在单个事务中进行超过 5000 次更新,SQL Server 可能会执行锁升级并锁定有问题的整个表,以避免处理过多的单个锁。

于 2013-08-22T09:08:25.430 回答