【发布时间】:2015-12-22 05:24:56
【问题描述】:
我在存储过程中有一个更新查询,这是导致死锁的主要原因。
此存储过程在foreach 循环中的 SSIS 包中使用。
看起来存储过程调用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 SPP.setupid=@in_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:据我了解,我们不能对我们尝试更新的表应用 NOLOCK。所以在我的一组行中,我们有一个正在更新的物理表,另一个是临时表,因此将 NOLOCK 用于临时表是没有意义的。如果我错了,请纠正我
标签: stored-procedures ssis deadlock