我試圖從服務器資源管理器執行my brand-spanking-new Stored Procedure,我得到:如何防止存儲過程中的除零錯誤?
消息8134,級別16,狀態1,過程duckbilledPlatypi,13號線 除以零遇到的錯誤。
這裏是(13)牽連的行:
@Week1End Week1End,
...和在多個上下文:
DECLARE
@Week1End datetime,
@Week2begin datetime
Select Ind.Description,
@BegDate BegDate,
@Week1End Week1End,
@Week1End Week2Begin,
@EndDate EndDate,
對於充分披露/上下文中,這裏是在整個SP,因爲它現在存在:
CREATE PROCEDURE [dbo].[duckbilledPlatypi]
@Unit varchar(25),
@BegDate datetime,
@EndDate datetime
AS
DECLARE
@Week1End datetime,
@Week2begin datetime
Select Ind.Description,
@BegDate BegDate,
@Week1End Week1End,
@Week1End Week2Begin,
@EndDate EndDate,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.QtyShipped ELSE 0 END)
Week1Usage,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.QtyShipped ELSE 0 END)
Week2Usage,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END)
Week1Price,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Price ELSE 0 END) -
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.QtyShipped ELSE 0 END)
UsageVariance,
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.QtyShipped ELSE 0 END) -
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END)
PriceVariance,
(SUM(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.QtyShipped ELSE 0
END) -
SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END))
/SUM(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END)
PercentageOfPriceVariance
From InvoiceDetail Ind
Where Ind.Unit = @Unit
AND Ind.InvoiceDate BETWEEN @BegDate AND @EndDate
Group By Ind.Description
我的猜測是@ Week1End Week1End失敗,因爲它不是給定一個值,因此是空的。我不知道我是否應該做這樣的事情,以防止0 /空:
DECLARE
@Week1End datetime = BegDate + 6;
@Week2begin datetime = BegDate + 7;
...或者是這樣的:
Select Ind.Description,
@BegDate BegDate,
@Week1End BegDate+6,
@Week2Begin BegDate+7,
@EndDate EndDate,
...或別的東西完全。
正如你可能會說,我不知道日期數學應該如何實際完成。什麼日期,真正需要的是有:
Week1Begin is the "BegDate" the user provided as a parameter
Week1End needs to be six days after Week1Begin
Week2Begin needs to be seven days after Week1Begin
Week2End is the "EndDate" the user provided as a parameter
例如,如果用戶輸入「2015年12月27日」爲BegDate和「2016年1月6日」爲結束日期,這些值必須是:
Week1Begin = 12/27/2015
Week1End = 1/2/2016
Week2Begin = 1/3/2016
Week2End = 1/6/2016 (week2 is only a four-day week in this case, due to what the user entered)
我該怎麼做才能確保在這裏沒有發生零點的div?
【如何「被零除」,以避免錯誤的SQL?(HTTP的可能重複://計算器.com/questions/861778/how-to-avoid-the-divide-by-zero-error-in-sql) –