解决死锁-SQL Server

时间:2019-02-18 14:19:37

标签: sql sql-server deadlock

我从2个独立的存储过程的这2个查询之间陷入僵局:

1。

UPDATE ord
SET
    [Num] = @Num,
    [Ref] = @Re,
    [Date] = @Date
FROM [Order] ord
INNER JOIN [Orders_Open] oo ON oo.Id = ord.ID

2。

    UPDATE oo
    SET oo.Name = i.Name,
    oo.Email = i.Email,
    oo.PostCode = i.PostCode,
    FROM Item_Order i 
    INNER JOIN [Orders_Open] oo ON oo.ID = i.ID

防止死锁发生的最佳方法是什么?我已经研究过使用Holdlock来防止死锁发生:

例如

    UPDATE oo WITH (HOLDLOCK)
    SET oo.Name = i.Name,
    oo.Email = i.Email,
    oo.PostCode = i.PostCode,
    FROM Item_Order i 
    INNER JOIN [Orders_Open] oo ON oo.ID = i.ID

这项工作吗?还是其他人可以就我可以尝试的其他方法提出建议?

谢谢

2 个答案:

答案 0 :(得分:0)

您不能同时更新同一条记录,因为数据完整性必须保留在每笔交易中。

  

数据完整性是指数据的准确性一致性   存储在数据库,数据仓库,数据集市或其他结构中。

您可以对两个查询使用一个事务块,以防止死锁。

答案 1 :(得分:0)

最好的方法是同时调整两者的性能,因此它们同时运行的可能性较小。