Sql 合并锁定整个目标 Table

Sql Merge Locking the Entire Target Table

我在 table 中使用 SQL 合并进行 CRUD 操作,该 table 拥有超过 300 万条记录,并且由于合并锁定 table 这会导致其他超时错误在生产环境中选择和更新。

网站在给定时间被多个用户访问,同一个 table 可以由不同的用户组同时更新。

所以根据我的情况,使用 SQL 合并是有效的还是我必须使用 INSERT/UPDATE/DELETE 语句?

是否有任何方法可以通过仅锁定数据记录而不是锁定整个 table 来改进合并?

这是由 sql 服务器中非常愚蠢的默认设置引起的。
出于某种原因 sql 服务器阻止了 table 上的所有读者,而作者正在使用 table。您可以像这样纠正微软的疏忽:

ALTER DATABASE yourdatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE yourdatabase SET READ_COMMITTED_SNAPSHOT ON with NO_WAIT
ALTER DATABASE yourdatabase SET MULTI_USER

这里有一篇关于此的优秀文章http://www.brentozar.com/archive/2013/01/implementing-snapshot-or-read-committed-snapshot-isolation-in-sql-server-a-guide/#comment-2220427