如何防止源表锁定时使用MERGE?



链接:https://learn.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=sql-server-ver15

提示"NOLOCK和READUNCOMMITTED是不允许的">

如果我不能在MERGE语句中使用NOLOCK,那么是否有任何方法可以防止源表被锁定?

例如,创建一个视图,在源表上使用NOLOCK进行选择查询。然后我可以使用这个视图作为合并查询的源表。这是一个好方法,以防止源表锁定时进行合并?

文档说" NOLOCK和READUNCOMMITTED是不允许的";对于目标表而不是源表。

在默认隔离级别下,READ COMMITTEDSQL Server使用共享锁读取。表源通常不完全锁定。SQL Server通常使用行锁,但它们可以升级为表锁。

READ COMMITTED SNAPSHOT隔离级别下,除了模式稳定锁外,表源没有被锁。

通过MERGE语句在目标表中更新或插入的行总是被SQL Server独占锁定,并且SQL Server可以再次升级为表锁。

相关内容

  • 没有找到相关文章

最新更新