我想帮助我解决一个我无法理解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何时被锁定以进行更新?在游标声明期间?在开放期间,在获取期间?或从开放到结束?
谢谢
答案 0 :(得分:1)
您正在更新的行将完全锁定,而 UPDATE
语句会运行。或者,如果您在单个事务中的所有语句,那么这些行将被独占锁定,直到事务提交(或回滚)
默认情况下,SQL Server使用行级锁定。但是,如果您在单个事务中进行超过5000次更新,SQL Server可能会执行锁定升级并锁定整个表格,以避免处理过多的单个锁定。