Sql server sql server更新被另一个事务阻止,更新中存在并发

Sql server sql server更新被另一个事务阻止,更新中存在并发,sql-server,locking,Sql Server,Locking,两个SP相继执行,第二个SP被第一个SP阻止。他们都试图更新同一个表。两个SP如下所示 创建过程[dbo].[SP1] 开始 设置事务隔离级别快照 开始事务导入 更新表t1//更新 一组[n1,n2…n100]记录 提交事务ImpSchd 设置事务隔离级别 宣读承诺书 结束 二, 创建过程[dbo].[SP2] 开始 更新表t1//更新 一组[n101,n102….n200]记录 结束 我的问题是sp1在运行时是快照级隔离,为什么它会阻止sp2(两个都在更新不同的记录集) 如果我同时为两组不

两个SP相继执行,第二个SP被第一个SP阻止。他们都试图更新同一个表。两个SP如下所示

  • 创建过程[dbo].[SP1]
    开始

    设置事务隔离级别快照
    开始事务导入

    更新表t1//更新 一组[n1,n2…n100]记录

    提交事务ImpSchd
    设置事务隔离级别 宣读承诺书

    结束

  • 二,

    创建过程[dbo].[SP2]

    开始

    更新表t1//更新 一组[n101,n102….n200]记录

    结束

    我的问题是sp1在运行时是快照级隔离,为什么它会阻止sp2(两个都在更新不同的记录集)

    如果我同时为两组不同的记录运行第一个sp 工作完美

    我怎样才能克服这种情况

    如果要为更新同一表的每个sp设置快照级别隔离,则这将是一个更大的更改


    如果两个sp必须更新一个表中的相同记录,我应该如何处理(两个sp将更新不同的列)?

    隔离级别仅用于不阻止选择,因此任何DML都不会受到隔离级别的影响。在这种情况下,更新会在表上使用IX锁,然后在页面上使用xlock行进行更新。因为您是批量更新,表本身可能由于锁升级而被锁定。希望这有帮助

    那么,当我为两大组记录运行sp1时,如何在没有任何阻塞的情况下成功运行?您能否澄清两大组记录,它们是否来自不同的表根据注释更新了答案,直到它没有回答我的问题