サーバー エクスプローラーから新しいストアド プロシージャを実行しようとしたところ、次のようになりました。
メッセージ 8134、レベル 16、状態 1、プロシージャ ダックビルドプラティピ、行 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 は、値が指定されておらず、null であるため失敗していると思います。0/null を防ぐために次のようなことをする必要があるかどうかはわかりません。
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
たとえば、ユーザーが BegDate に「12/27/2015」、EndDate に「1/6/2016」と入力した場合、これらの値は次のようにする必要があります。
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 が発生していないことを確認するにはどうすればよいですか?