我从两个独立的存储过程中获得这两个查询之间的死锁:
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来防止死锁发生之前:
EG
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
这会有用吗?或者其他人可以就我还能尝试的其他方面提出建议吗?
谢谢
您可以同时更新相同的记录,因为必须在每个事务中保留数据完整性。
数据完整性是指存储在数据库,数据仓库,数据集市或其他构造中的数据的准确性和一致性。
您可以为这两个查询使用一个事务块来防止死锁。
最好的方法是调整两者的性能,因此它们不太可能在同一时刻运行。