链接: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 COMMITTED
SQL Server使用共享锁读取。表源通常不完全锁定。SQL Server通常使用行锁,但它们可以升级为表锁。
在READ COMMITTED SNAPSHOT
隔离级别下,除了模式稳定锁外,表源没有被锁。
通过MERGE语句在目标表中更新或插入的行总是被SQL Server独占锁定,并且SQL Server可以再次升级为表锁。