Sql游标锁定

时间:2013-08-21 16:30:04

标签: sql-server-2008 cursor locking

我想帮助我解决一个我无法理解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何时被锁定以进行更新?在游标声明期间?在开放期间,在获取期间?或从开放到结束?

谢谢

1 个答案:

答案 0 :(得分:1)

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

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