两个SP一个接一个地执行,第二个SP被第一个阻止。他们都试图更新同一张桌子。两个SP如下:
创建程序[dbo]。[SP1]
开始设置交易隔离级别快照;
开始交易ImpSchd更新表t1 .......... ................................ //更新 一组[n1,n2 .... n100]记录
COMMIT TRANSACTION ImpSchd
设置交易隔离级别 READ COMMITTED;END
2
CREATE PROCEDURE [dbo]。[SP2]
开始
更新表t1 .......... ................................ //更新 一组[n101,n102 ..... n200]记录
END
我的问题是当sp1运行时是快照级别隔离,为什么阻止sp2(n都更新不同的记录集)?
如果我同时运行两个不同的记录集sp 效果很好。
我如何克服这种情况?
如果要为每个sp设置使用快照级别隔离更新同一个表,那么这将是一个更大的更改。
如果两个sp必须更新表中的相同记录,我应该如何处理(两个sp都会更新不同的列)?
答案 0 :(得分:0)
隔离级别仅用于不阻止选择,因此任何DML都不会受到隔离级别的影响。在这种情况下,更新会在表上执行IX锁定,然后在行上执行xlock更新。因为您要批量更新,表格由于锁升级,它本身可能已被锁定。希望这有帮助