SQLServer2008中的死锁

SQLServer2008中的死锁,sql,sql-server-2008,Sql,Sql Server 2008,我有两个存储过程,都在同一个表中插入行 一次存储过程调用常规时间间隔,另一次存储过程调用按用户事件。有时两个存储过程一起调用,此时会发生死锁 如何解决此问题?在SP开始时锁定,在结束时解锁 及 您可以在两个存储过程开始时锁定表。这样就不会出现死锁,因为数据修改必须等到其他存储过程完成。请参见以下命令: select 1 from theTable with (tablock, holdlock) where 1=0; 它还需要在事务内部完成。当事务完成时,表将是可编辑的。 您也可以考虑检测条

我有两个存储过程,都在同一个表中插入行

一次存储过程调用常规时间间隔,另一次存储过程调用按用户事件。有时两个存储过程一起调用,此时会发生死锁


如何解决此问题?

在SP开始时锁定,在结束时解锁


您可以在两个存储过程开始时锁定表。这样就不会出现死锁,因为数据修改必须等到其他存储过程完成。请参见以下命令:

select 1 from theTable with (tablock, holdlock) where 1=0;

它还需要在事务内部完成。当事务完成时,表将是可编辑的。

您也可以考虑检测条件并重试。让每个过程在随机的短时间内后退

错误消息会告诉您该怎么做。重试被选为受害者的查询。请重试。显示存储的过程代码和涉及的表的结构不要建议在将来的版本中删除某些内容。@Oded:只需按照其中的链接获取将来的版本即可。那么为什么不首先发布该链接呢?这两个链接都提供了有关查找当前锁的信息,而不是(正如我读到这个答案时所猜测的)关于获取显式锁