更新SQL查询本身陷入僵局

时间:2018-10-05 15:34:25

标签: sql sql-server deadlock

我重新创建了查询:

MERGE [Unshipped] u
USING [Order] order or ON or.ID = u.ID

WHEN MATCHED AND u.Date <> or.Date
   THEN
      UPDATE 
      SET u.Date = or.Date

WHEN NOT MATCHED
    THEN 
       INSERT (ID, FK, Date)
       VALUES (or.ID, or.FK, or.Date)

表2

在我的现实生活中,这似乎是死锁。 ID列上有一个聚集索引。

我的研究使我陷入了两个问题:

  1. MERGE的MATCH部分检查索引是否匹配,并不断读取并锁定这些行/页面。

  2. 当一行中没有匹配项时,它将尝试首先插入新的索引行,因此它将请求对行/页进行写锁定...

此查询是否属于这种情况?谁能进一步建议我?阻止这种僵局的最佳方法是什么?任何信息都很棒。

0 个答案:

没有答案