1

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을 호출하면 문제가 해결됩니다.

+0

proc 정의를 게시 할 수 있습니까? – JohnFx

+0

문제를 설명하기 위해 일부 코드 스 니펫을 게시 할 수 있습니까? "누락 된"열이 "보고서 작성"프로세스 결과 또는 "요약"프로 시저에 의해 작성된 임시 테이블에서 누락 되었습니까? –

+0

어둠의 야생 촬영 - 23시와 00시 사이의 차이를 계산 한 결과 어딘가에서 calc의 음수? – Paolo

답변

0

두 가지 질문 :

# DailySales8의 스키마는 전혀 달라 집니까? 실행 날짜 나 HourlyProc에 제공된 매개 변수에 직간접 적으로 종속되어 있습니까?

요약에서 INSERT #tmpTodaysSales EXEC HourlyProc ...의 실행이 실패합니까? 첫 번째 또는 두 번째?

+0

아니요, # DailySales8의 스키마가 변경되지 않습니다. 그리고 예, 그것은 실행 날짜에 직접 의존합니다. 분별 판매 보고서를 작성하므로 판매 날짜를 검색하기 위해 현재 날짜 또는 전달 날짜를 사용합니다. 나는 어느 것이 실패하는지 모른다. – CaffGeek

+0

두 결과가 서로간에 숨겨진 요구 사항이 있음을 알 수 있습니다. 나쁜 디자인. 이후 수정되었습니다. – CaffGeek

0

밤새 유지 관리 계획은 어떻게 생겼으며 다음 날 2230과 1000 사이에 실행되는 다른 예정된 일자리가 있습니까? 유지 관리 계획 또는 다른 상담원 작업에서 SP가 손상되는 일종의 손상이 발생할 수 있습니다.

관련 문제