脚本中的奇怪变化会导致无限的死锁

时间:2017-11-30 13:49:53

标签: sql-server sql-update where deadlock

我在我的应用程序声明中添加了另一个WHERE条件。然后我可以在Activity监视器中看到很多像LCK_M_这样的死锁。发生这种情况后,SQL-Server根本不会根据用户进行恢复。即使我杀死受影响的Windows和SQL进程 - 我需要重新启动SQL-Server然后再次运行。

这是它的工作原理。

UPDATE myDocuments
SET StatusLead = 10
WHERE FirmaPubINdex NOT IN
(
    SELECT firmapubINdex FROM CSDokument WHERE dokumenttyp='3' AND ProjPubINdex IN
    (   
    SELECT PubINdex FROM CSProjekt WHERE Projektnummer = '123456'  
    )
)
AND ProjPubINdex IN
    (
    SELECT PubINdex FROM CSProjekt WHERE Projektnummer = '123456'  
    )
AND DokumentTyp = '2'

这是导致问题的陈述。唯一的变化是在最后一行。

UPDATE myDocuments
SET StatusLead = 10
WHERE FirmaPubINdex NOT IN
(
    SELECT firmapubINdex FROM CSDokument WHERE dokumenttyp='3' AND ProjPubINdex IN
    (   
    SELECT PubINdex FROM CSProjekt WHERE Projektnummer = '123456'  
    )
)
AND ProjPubINdex IN
    (
    SELECT PubINdex FROM CSProjekt WHERE Projektnummer = '123456'  
    )
AND DokumentTyp = '2'
AND StatusLead <> '18'

目前我有点困惑,因为另一个用户已经测试了一整天的脚本并且没有问题。然后我尝试与另一个用户,该用户导致该问题。脚本中的这种变化真的会导致这个问题,还是偶然的呢?

0 个答案:

没有答案