场景:
使用windows服务定时更新合同数据:执行存储过程(pas_RefreshContractStatus),但存储过程里面有一个需要更新4W条人才表循环处理业务
问题:
循环更新4W条人才表状态字段
优化前:
UPDATE pt SET StatusText = CASE WHEN EXISTS ( SELECT 1 FROM pas_ContractQuit c WHERE IsActive=1 AND ‘,‘+TalentIDs+‘,‘ LIKE ‘%,‘+CONVERT(NVARCHAR(20),pt.ID)+‘,%‘) THEN ‘已退租‘ ELSE ‘未申请‘ END FROM pas_Talent pt
耗时:1分07秒
优化后:
--定义人才行转列start SELECT b.col ID INTO #TalentIDs FROM pas_ContractQuit c OUTER APPLY ( SELECT * FROM dbo.Split(TalentIDs, ‘,‘) ) b WHERE IsActive = 1 --定义人才行转列end UPDATE pt SET StatusText = CASE WHEN EXISTS ( SELECT 1 FROM #TalentIDs WHERE pt.ID = #TalentIDs.ID ) THEN ‘已退租‘ ELSE ‘未申请‘ END FROM pas_Talent pt
耗时:2秒
原文:http://www.cnblogs.com/bwlluck/p/6347272.html