2017-09-13 58 views
0

如何在設置變量時使用if exists子句?如果在SQL中設置變量時存在的問題

我有這樣的設置,使頂select語句的結果(@F1Runs, @F2Runs, @F3Runs,所有相應的Date)插入到臨時表#WeekEnding,然後從那裏進入實際的表。

問題是,在某些日期,某些或所有熔爐沒有「運行次數」結果。因此,當我設置變量@ F1Runs,@ F2Runs和@ F3Runs時,我試圖找到一種方法來放置一個IF EXISTS語句或類似的東西,以便當它們不存在時以0的形式插入表中。

我得到的錯誤是:

無法將NULL值插入列 'F2Runs',表 'WWALMDB.dbo.WeeklyRuns';列不允許有空值。 INSERT失敗。

我的代碼:

Select 
    jr.FurnaceID, Count(Distinct jr.JobID) As 'Number of Runs' 
Into 
    #WeekEnding 
From 
    dbo.JobReports jr 
Where 
    jr.StartDateTime >= @StartDate 
    and jr.EndDateTime < @Enddate 
Group By 
    jr.FurnaceID 
Order By 
    Count(jr.JobID) DESC 

Select @F1Runs = [Number of Runs] 
From #WeekEnding 
Where FurnaceID = 1 

Select @F2Runs = [Number of Runs] 
From #WeekEnding 
Where FurnaceID = 2 

Select @F3Runs = [Number of Runs] 
From #WeekEnding 
Where FurnaceID = 3 

If Exists (Select wr.WeekEnding 
      From WWALMDB.dbo.WeeklyRuns wr 
      Where wr.WeekEnding = DATEADD(day, -1, @Enddate)) 
Begin 
    Update WWALMDB.dbo.WeeklyRuns 
    Set F1Runs = @F1Runs, 
     F2Runs = @F2Runs, 
     F3Runs = @F3Runs 
    Where WeeklyRuns.WeekEnding = DATEADD(day, -1, @Enddate) 
End 
Else 
Begin 
    Insert Into WWALMDB.dbo.WeeklyRuns (WeekEnding, F1Runs, F2Runs, F3Runs) 
    Values (DATEADD(day, -1, @Enddate), @F1Runs, @F2Runs, @F3Runs) 
End 

回答

0

這是我的理解是,如果不存在將需要一個塊,所以我不;噸認爲這將幫助你。

我認爲ISNULL這裏是你的朋友

Select jr.FurnaceID, Count(Distinct jr.JobID) As 'Number of Runs' 
Into #WeekEnding 
From dbo.JobReports jr 
Where jr.StartDateTime >= @StartDate and jr.EndDateTime < @Enddate 
Group By jr.FurnaceID 
Order By Count(jr.JobID) DESC 

SET @F1Runs = ISNULL(Select [Number of Runs] 
From #WeekEnding 
Where FurnaceID = 1,0) 

SET @F2Runs = (Select [Number of Runs] 
From #WeekEnding 
Where FurnaceID = 2,0) 

SET @F3Runs = (Select [Number of Runs] 
From #WeekEnding 
Where FurnaceID = 3,0) 

If Exists (Select wr.WeekEnding 
      From WWALMDB.dbo.WeeklyRuns wr 
      Where wr.WeekEnding = DATEADD(day, -1, @Enddate)) 
Begin 
    Update WWALMDB.dbo.WeeklyRuns 
    Set F1Runs = @F1Runs, 
     F2Runs = @F2Runs, 
     F3Runs = @F3Runs 
    Where WeeklyRuns.WeekEnding = DATEADD(day, -1, @Enddate) 
    End 
    Else 
Begin 
    Insert Into WWALMDB.dbo.WeeklyRuns (WeekEnding, F1Runs, F2Runs, F3Runs) 
    Values (DATEADD(day, -1, @Enddate), @F1Runs, @F2Runs, @F3Runs) 
End 

OR

Select jr.FurnaceID, Count(Distinct jr.JobID) As 'Number of Runs' 
Into #WeekEnding 
From dbo.JobReports jr 
Where jr.StartDateTime >= @StartDate and jr.EndDateTime < @Enddate 
Group By jr.FurnaceID 
Order By Count(jr.JobID) DESC 

Select @F1Runs = [Number of Runs] 
From #WeekEnding 
Where FurnaceID = 1 

Select @F2Runs =[Number of Runs] 
From #WeekEnding 
Where FurnaceID = 2 

Select @F3Runs = [Number of Runs] 
From #WeekEnding 
Where FurnaceID = 3 

If Exists (Select wr.WeekEnding 
      From WWALMDB.dbo.WeeklyRuns wr 
      Where wr.WeekEnding = DATEADD(day, -1, @Enddate)) 
Begin 
    Update WWALMDB.dbo.WeeklyRuns 
    Set F1Runs = ISNULL(@F1Runs,0), 
     F2Runs = ISNULL(@F2Runs,0), 
     F3Runs = ISNULL(@F3Runs,0) 
    Where WeeklyRuns.WeekEnding = DATEADD(day, -1, @Enddate) 
    End 
    Else 
Begin 
    Insert Into WWALMDB.dbo.WeeklyRuns (WeekEnding, F1Runs, F2Runs, F3Runs) 
    Values (DATEADD(day, -1, @Enddate), @F1Runs, @F2Runs, @F3Runs) 
End 
+0

不知道爲什麼,但第一個選項提出了一些錯誤。第二個工程,但。謝謝! – MadelineK