在工作中写了一段半年自动备份的脚本,但是发现跨半年时并没有自动备份成功
/*******************************The Semesterly backup*******************************/
declare @CureentFFEWeek varchar(8),@sql varchar(max),@historyH2 varchar(10),@H1 varchar(10),@CurrentWeekHYSeq int,@NextWeekHYSeq int
select @CureentFFEWeek = WkDate from tblFFEWeekList where WKSeq = 1
select @CurrentWeekHYSeq = HYSeq from tblFFEWeekList_52WeekAfterFFEWeek where WkDate = @CureentFFEWeek
select @NextWeekHYSeq = HYSeq from tblFFEWeekList_52WeekAfterFFEWeek where WkDate = convert(varchar(8),dateadd(day,7,@CureentFFEWeek),112)
select @historyH2 = isnull(TimeDisplay,'') from historySVGeoHTDCallReachFrequency where TimePeriod = 'H2'
select @H1 = TimeDisplay from tempSVGeoCallReachFrequency where TimePeriod = 'H1'
select @CureentFFEWeek = WkDate from tblFFEWeekList where WKSeq = 1
if @CurrentWeekHYSeq <> @NextWeekHYSeq and @historyH2 <> @H1
begin
set @sql = '
update a
set TimePeriod = cast(''H'' + cast(cast(right(a.TimePeriod,1) as int)+1 as varchar(10)) as varchar(10))
from historySVGeoHTDCallReachFrequency a
insert into historySVGeoHTDCallReachFrequency
(Geo,Granularity,TimePeriod,TimeDisplay,TimeType,Reach,Frequency)
select Geo,Granularity,''H2'' as TimePeriod,TimeDisplay,TimeType,Reach,Frequency
from tempSVGeoCallReachFrequency
where timeperiod = ''H1''
'
print(@sql)
exec (@sql)
end
经排查,发现第一次备份的情况下,historySVGeoHTDCallReachFrequency历史表为空,@historyH2为NULL值
为了验证简化脚本运行发现无输出
declare @historyH2 varchar(10),@H1 varchar(10),@CurrentWeekHYSeq int,@NextWeekHYSeq int
select @CurrentWeekHYSeq = 3
select @NextWeekHYSeq = 4
select @historyH2 = null
select @H1 = '2021H1'
if @CurrentWeekHYSeq <> @NextWeekHYSeq and @historyH2 <> @H1
begin
print 'hello world!'
end
修改脚本对null值进行判断,发现有输出内容
declare @historyH2 varchar(10),@H1 varchar(10),@CurrentWeekHYSeq int,@NextWeekHYSeq int
select @CurrentWeekHYSeq = 3
select @NextWeekHYSeq = 4
select @historyH2 = null
select @H1 = '2021H1'
if @CurrentWeekHYSeq <> @NextWeekHYSeq and isnull(@historyH2,'') <> @H1
begin
print 'hello world!'
end
总结:
NULL值不能用<>同其他数值进行比较