我在一个存储过程(使用SQL Server 2005)中遇到了永远运行查询的问题。
在此存储过程中,有许多UPDATE语句和一些在一个Transaction下运行的INSERT语句。
调试存储过程时,我发现有一个特定的UPDATE查询无限期地运行,如下所示。
BEGIN TRAN
...
...-- some INSERT & UPDATE statements
UPDATE PIH
SET PIH.RemittanceHeaderID = RD.RemittanceHeaderID
FROM TempPayroll TP
INNER JOIN RemittanceDetails RD ON TP.UniqueID = RD.PLInvoiceDetailID
INNER JOIN PLInvoiceHeader PIH ON RD.PLInvoiceUniqueID = PIH.InvoiceUniqueID AND PIH.CompanyCode = TP.CompanyCode
WHERE TP.PLSelfBill = 1
AND TP.UsePLPaymentTerms = 1
AND RD.PLInvoiceDetailID IS NOT NULL
AND TP.RecordType LIKE 'INVOICE%'
AND RD.RecordType LIKE 'INVOICE%'
... --some UPDATE statements
COMMIT TRAN
但是,当我删除CompanyCode
条件时,存储过程正在快速运行而没有任何问题。此外,如果我单独在一个事务下单独执行此语句,它运行正常。
此查询有大约240条匹配记录。每个表只包含30k - 50k记录。
如何调试查询以及如何修复它?
为什么只有JOIN条件(CompanyCode
)才会产生此问题?
提前致谢。