我正在尝试在查看页面时更新表中的行(它会增加查看的计数),但是现在我得到一个死锁错误,我猜这是由于两个或更多人尝试更新同一行?
错误是:
Transaction (Process ID 60) was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
我的SQL是:
UPDATE [ProductDescription]
SET [ViewCount] = ([ViewCount] + 1)
WHERE ProductCode = @prodCode
AND ApplicationID = @AppID
我相信我可能需要一个WITH(NOLOCK)?
答案 0 :(得分:0)
你不需要NOLOCK。这只会删除读锁定,并会导致不可预测的结果。最好的做法是在update语句中使用TABLOCK,这意味着在完成之前其他进程无法访问该表。
答案 1 :(得分:-1)
将事务隔离级别设置为SERIALIZABLE或SNAPSHOT以正确更新数据。有关详细信息,请检查HERE
答案 2 :(得分:-1)
问题更可能是由用户同时运行选择引起的。默认隔离级别为“read committed”,导致锁定。
除非您正在阅读的数据是最新的至关重要,否则请考虑使用:
with(nolock)
在选择或替代隔离级别。