我在不同的SQL Server代理作业中运行了两个过程。两者都更新同一个表。现在我遇到了死锁错误。
该表还有一个更新历史表的触发器。
当我检查XML死锁报告时,它显示以下信息:
<owner-list>
<owner mode="U" />
</owner-list>
<waiter-list>
<waiter mode="U" requestType="wait" />
</waiter-list>
试图找出问题所在。问题是断断续续的。
答案 0 :(得分:0)
您可能需要共享存储过程代码才能提供帮助。仅凭XML代码是不够的。
话虽如此,您是否将代码包装在事务中?然后锁定桌子?
像这样:
BEGIN TRANSACTION
SELECT *
FROM tblYourTable
WITH (TABLOCK, HOLDLOCK) -- lock the table until the end of the transaction
-- Continue other queries with the table (Updating, Inserting, etc.)
COMMIT TRANSACTION -- release the lock (and transaction) after you are done with all of your processing.
如果出现问题,您也可以使用回滚。
但是,要回答有关U锁的问题,以下是对SQL Server中锁如何工作的一个很好的总结:Lock Types