SQL Server

时间:2017-09-22 17:48:02

标签: sql-server

我在不同的SQL Server代理作业中运行了两个过程。两者都更新同一个表。现在我遇到了死锁错误。

该表还有一个更新历史表的触发器。

当我检查XML死锁报告时,它显示以下信息:

<owner-list>
    <owner mode="U" />
</owner-list>
<waiter-list>
    <waiter  mode="U" requestType="wait" />
</waiter-list>

试图找出问题所在。问题是断断续续的。

1 个答案:

答案 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