|
supersql
Yak Posting Veteran
99 Posts |
Posted - 2008-07-30 : 12:07:10
|
| How could i replace this cursor for better performance or to a CTEDECLARE cur_InspectionGroup CURSOR FAST_FORWARD FORSELECT DISTINCT dbo.InspectionItems.ItemId, dbo.InspectionItems.InspectionItemName, dbo.InspectionItems.ZoneInstanceId, dbo.InspectionItems.ScoreTypeIdFROM dbo.Audits INNER JOIN dbo.InspectionItems ON dbo.Audits.FloorId = dbo.InspectionItems.FloorIdWHERE (dbo.Audits.AuditId = @AuditId) AND (dbo.InspectionItems.Active = 1)UNIONSELECT dbo.InspectionItems.ItemId, dbo.InspectionItems.InspectionItemName, dbo.InspectionItems.ZoneInstanceId, dbo.InspectionItems.ScoreTypeIdFROM dbo.Audits_InspectionItems INNER JOIN dbo.InspectionItems ON dbo.Audits_InspectionItems.InspectionItemId = dbo.InspectionItems.ItemIdWHERE --(ISNULL(dbo.Audits_InspectionItems.SubInspectionItemId,0) = 0) AND (dbo.Audits_InspectionItems.AuditId = @AuditId)ORDER BY dbo.InspectionItems.InspectionItemNameOPEN cur_InspectionGroupDECLARE @GroupId int, @GroupName varchar(100), @ZoneInstanceId int, @ScoreType intFETCH cur_InspectionGroup INTO @GroupId, @GroupName, @ZoneInstanceId, @ScoreTypeWHILE @@FETCH_STATUS = 0BEGIN DECLARE @GroupScore float, @InspItemId int, @InspectedZoneId int, @ItemComment varchar(200), @PrevScore float SET @GroupScore = null SET @InspItemId = 0 SET @InspectedZoneId = 0 SET @ItemComment = '' SET @PrevScore = null SELECT TOP 1 @InspItemId = dbo.Audits_InspectionItems.ItemId, @GroupScore = dbo.Audits_ItemsScore.[Value], @InspectedZoneId = dbo.Audits_ItemsScore.ZoneInstanceId FROM dbo.Audits_InspectionItems INNER JOIN dbo.Audits_ItemsScore ON dbo.Audits_InspectionItems.ItemId = dbo.Audits_ItemsScore.AuditInspectionItemId WHERE (dbo.Audits_InspectionItems.AuditId = @AuditId) AND (dbo.Audits_InspectionItems.InspectionItemId = @GroupId) AND (dbo.Audits_InspectionItems.SubInspectionItemId = 0) SELECT @ItemComment = Comment FROM Audits_Comments WHERE AuditInspectionItemId = @InspItemId IF(@InspectedZoneId = 0) BEGIN SET @InspectedZoneId = @ZoneInstanceId END --Get any previous scores for this record SELECT @PrevScore = Score FROM #tmpPreviousAuditScores WHERE (InspectionItemId = @GroupId) AND (SubInspectionItemId = 0) --Inject the header row INSERT INTO #tmp (AuditItemID,AuditItemName,IsGroupHeader,GroupHeaderHasItems, ZoneID, Score, InspectionItemId, Comment, ScoreTypeId, PreviousScore) VALUES(@GroupId, @GroupName,1,0,@InspectedZoneId, @GroupScore, @InspItemId, @ItemComment, @ScoreType, @PrevScore) |
|