解决死锁-SQL Server

解决死锁-SQL Server,sql,sql-server,deadlock,Sql,Sql Server,Deadlock,我在来自两个单独存储过程的这两个查询之间遇到死锁: 一, 二, 防止僵局发生的最佳解决方法是什么?我已经研究过使用holdlock在死锁发生之前防止死锁: e、 g 这样行吗?或者其他人能给我一些建议吗 谢谢您不能同时更新同一条记录,因为每笔交易都必须保持数据完整性 数据完整性是指数据的准确性和一致性 存储在数据库、数据仓库、数据集市或其他结构中 您可以为两个查询使用一个事务块来防止死锁。您不能同时更新同一条记录,因为每个事务中都必须保持数据完整性 数据完整性是指数据的准确性和一致性 存储在数据

我在来自两个单独存储过程的这两个查询之间遇到死锁:

一,

二,

防止僵局发生的最佳解决方法是什么?我已经研究过使用holdlock在死锁发生之前防止死锁:

e、 g

这样行吗?或者其他人能给我一些建议吗


谢谢

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

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


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

您不能同时更新同一条记录,因为每个事务中都必须保持数据完整性

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


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

最好的方法是同时调整这两个查询的性能,这样它们就不太可能同时运行。

最好的方法是同时调整这两个查询的性能,因此,它们不太可能同时运行。

您以前在每个SP中对同一事务执行过任何操作吗?同时触发多个更新,命中同一个源?@EzLo nope,只是一个select语句。这些交易也是隐含的。它会通过使它们显式化来解决任何问题吗?我很确定问题是,当更新启动时,更新1会加入到您的oo表中,而oo表也在更新中-您是否尝试过简单地向更新1脚本添加一个nolock,该脚本遵循内部JOIN[Orders_Open]oo WITH(nolock)?@Ryangaddon,如果您是指自动提交的话(默认行为,其中每条语句都是单独的事务),我不希望显式事务会产生不同的效果。隐式事务在执行更新时启动事务,但不会自动提交事务。您以前在每个SP中对同一事务执行过任何操作吗?同时触发多个更新,命中同一个源?@EzLo nope,只是选择sta事务也是隐式的。它会通过显式的方式解决任何问题吗?我很确定问题是,当更新启动时,更新1会加入到您的oo表中,而oo表也在更新中-您是否尝试过简单地向更新1脚本添加nolock,该脚本遵循内部JOIN[Orders_Open]oo WITH(nolock)命令?@Ryangaddon,如果你是指自动提交(默认行为,其中每条语句都是一个单独的事务),我不希望显式事务产生不同的结果。隐式事务在执行更新时启动事务,但不会自动提交事务。
UPDATE ord
SET
    [Num] = @Num,
    [Ref] = @Re,
    [Date] = @Date
FROM [Order] ord
INNER JOIN [Orders_Open] oo ON oo.Id = ord.ID
    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
    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