MS SQL 2005를 실행 중이며 지난 며칠 동안 매우 특이한 문제가 발생했습니다.저장된 프로 시저가 밤새 깨졌습니다.
두 개의 procs가 있습니다. 하나는 시간별 데이터 보고서를 생성하는 procs입니다. 그리고 그것을 호출하는 다른 사람은 결과를 임시 테이블에 넣고 일부 집계를 수행하고 요약을 반환합니다.
다음날 아침까지 작동합니다.
갑자기 호출 보고서가 잘못된 열 이름에 대해 불평합니다.
픽스는 단순히 호출하는 proc의 재 컴파일이며 모든 것이 잘 작동합니다.
어떻게 이런 일이 발생할 수 있습니까? 이 procs를 생산으로 옮긴 이래 3 일 연속으로 일어난 일입니다.
EDIT : 호출자 (요약) proc에 필요한 재 컴파일이 아닙니다. 나는 callee (매시간) proc을 실행함으로써 문제를 해결할 수 있었다. 그런 다음 요약 프로 시저를 실행합니다. 이것은 전에보다 덜 합당합니다.
EDIT2 : 시간별 proc는 다소 크기가 커서 여기에 게시하지 않습니다. 그러나 결국, SELECT INTO를 수행 한 다음 조건부로 작성된 임시 테이블에서 적절한 결과를 리턴합니다.
Select [large column list]
into #tmpResults
From #DailySales8
Where datepart(hour,RowStartTime) >= @StartHour
and datepart(hour,RowStartTime) < @EndHour
and datepart(hour, RowStartTime) <= @LastHour
IF @UntilHour IS NOT NULL
AND EXISTS (SELECT * FROM #tmpResults WHERE datepart(hour, RowEndTime) = @UntilHour) BEGIN
SELECT *
FROM #tmpResults
WHERE datepart(hour, RowEndTime) = @UntilHour
END ELSE IF @JustLastFullHour = 1 BEGIN
DECLARE @MaxHour INT
SELECT @MaxHour = max(datepart(hour, RowEndTime)) FROM #tmpResults
IF @LastHour > 24 SELECT @LastHour = @MaxHour
SELECT *
FROM #tmpResults
WHERE datepart(hour, RowEndTime) = @LastHour
IF @@ROWCOUNT = 0 BEGIN
SELECT *
FROM #tmpResults
WHERE datepart(hour, RowEndTime) = @MaxHour
END
END ELSE BEGIN
SELECT * FROM #tmpResults
END
그런 다음 모든 임시 테이블을 삭제하고 종료합니다.
호출자 (요약)
첫번째 결과를 저장하는 임시 테이블을 생성 #tmpTodaySales 칼럼리스트는 다른 PROC#tmpResults에서의 정의와 일치한다. 그런 다음 그것은 시간당 proc 두 번 호출 끝납니다
INSERT #tmpTodaysSales
EXEC HourlyProc @LocationCode, @ReportDate, null, 1
INSERT #tmpTodaysSales
EXEC HourlyProc @LocationCode, @LastWeekReportDate, @LastHour, 0
나는 그들이 실패 이러한 호출입니다 믿습니다. 그러나 proc을 다시 컴파일하거나, 이것을 벗어나 시간별 프로 시저를 실행 한 다음, summary proc을 호출하면 문제가 해결됩니다.
proc 정의를 게시 할 수 있습니까? – JohnFx
문제를 설명하기 위해 일부 코드 스 니펫을 게시 할 수 있습니까? "누락 된"열이 "보고서 작성"프로세스 결과 또는 "요약"프로 시저에 의해 작성된 임시 테이블에서 누락 되었습니까? –
어둠의 야생 촬영 - 23시와 00시 사이의 차이를 계산 한 결과 어딘가에서 calc의 음수? – Paolo