我在存儲過程中有一個更新查詢,這是導致死鎖的主要原因。更新查詢中的死鎖
此存儲過程用於SSIS包中的foreach
循環中。 看起來存儲過程調用Salespreprocessing
表並進入死鎖狀態。當我們同時調用這個SSIS包時會發生這種情況。這裏是我的SQL查詢
UPDATE SPP
SET SPP.Promotion_Id = T.PromotionID
FROM staging.SalesPreProcessing SPP WITH(INDEX(staging_CIDXSalesPreprocessing1))
INNER JOIN #WithConcatenatedPromotionID T
ON SPP.DocLineNo = T.BillItem
AND SPP.DocNum = T.BillNumber
AND SPP.Cust_Code = T.CustomerCode
AND SPP.ZCS_EAN_CODE = T.ProductCode
AND SPP.BILLING_REPORTING_DATE = T.PricingDate
WHERE SPP.InterfaceStatusTrackingID = @in_InterfaceStatusTrackingId AND [email protected]_SetupId
我已經創建了聚集索引的setupid
和表的列的其餘部分的非聚集索引。
這裏是我的非聚集索引
CREATE NONCLUSTERED INDEX [staging_CIDXSalesPreprocessing] on salespreprocessing
(
[SetupId] ASC,
[InterfaceStatusTrackingID] ASC
) INCLUDE`enter code here`
([DocLineNo] ,
[DocNum] ,
[Cust_Code] ,
[ZCS_EAN_CODE] ,
[Billing_Reporting_Date]
)
我仍然得到死鎖
爲什麼不用表中的nolock提示試試? – bmsqldev
@bmsqldev:根據我的理解,我們不能將NOLOCK應用於正在嘗試更新的表。因此,在我的一組行中,我們有一個物理表,我們正在更新,另一個表是臨時表,因此放入如果我錯了,請爲我寫入NOLOCK。 – Namrata