现在我有下面的3个if语句,它们几乎都一样,我一直在寻找一种方法来组合所有3个语句,这样它们就不会是3个独立的if语句了很长一段时间。如果有人对如何继续有任何建议,我将不胜感激。为什么你不能把else if放在sql err 中
IF (@updateTerm = 1)
BEGIN
update odb.transcriptCourse
set startTerm = 1, endTerm = 1, actualTerm = 1, calendarTerms = 1
where endyear = @fiscalYear
and actualTerm = 2
and schoolNumber in('0150', '0840', '0360')
and (startTerm != 1 or endTerm != 1 or actualTerm != 1 or
calendarTerms != 1) END
ELSE
BEGIN
PRINT 'This is not term 1';
END
IF (@updateTerm = 2)
BEGIN
update odb.transcriptCourse
set startTerm = 2, endTerm = 2, actualTerm = 2, calendarTerms = 2
where endyear = @fiscalYear
and actualTerm = 4
and schoolNumber in('0150', '0840', '0360')
and (startTerm != 2 or endTerm != 2 or actualTerm != 2 or
calendarTerms != 2) END
ELSE
BEGIN
PRINT 'This is not term 2';
END
IF (@updateTerm = 7)
BEGIN
update odb.transcriptCourse
set startTerm = 7, endTerm = 7, actualTerm = 7, calendarTerms = 1
where endyear = @fiscalYear
and schoolname like 'Z %'
and (startTerm != 7 or endTerm != 7 or actualTerm != 7 or
calendarTerms != 1)END
ELSE
BEGIN
PRINT 'This is not term 7';
END
update odb.transcriptCourse
set startTerm = @updateTerm, endTerm = @updateTerm, actualTerm = @updateTerm, calendarTerms = case WHEN @updateTerms = 7 then 1 else @updateTerms end
where 1 = 1 AND (
(@updateTerm = 1 AND (endyear = @fiscalYear
and actualTerm = 2
and schoolNumber in('0150', '0840', '0360')
and (startTerm != 1 or endTerm != 1 or actualTerm != 1 or
calendarTerms != 1)) )
OR
( @updateTerm = 2 AND ( endyear = @fiscalYear
and actualTerm = 4
and schoolNumber in('0150', '0840', '0360')
and (startTerm != 2 or endTerm != 2 or actualTerm != 2 or
calendarTerms != 2)))
OR
(@updateTerm =3 AND (where endyear = @fiscalYear
and schoolname like 'Z %'
and (startTerm != 7 or endTerm != 7 or actualTerm != 7 or
calendarTerms != 1))))
@updateterm = x
的短路逻辑将处理单独的if
语句