0
SSRS(Visual Studio 2010)でレポートを作成するために使用するSELECTステートメント(ストアドプロシージャではありません)があります。SSRSレポートが開発ではなくプロダクションで動作する理由
パラメータ@ClassCodeは、問題の原因となるものです。しかし、開発では正常に動作しますが、プロダクションに展開すると永遠にレンダリングされます。
私はそれをパラメータスニッフィングと仮定しており、ストアドプロシージャ内でそれを修正する方法を読んでいます。しかし、私はSPを持っていない、私はSELECTステートメントを使用しています。
SELECTステートメントの回避策は何ですか? そして、環境の違いは何ですか?生産ははるかに強力です。 下記のマイクエリ:
;WITH cte1
AS
(
SELECT QuoteID,
AccidentDate,
PolicyNumber,
SUM(PaidLosses) as PaidLosses
FROM tblLossesPlazaCommercialAuto
WHERE InsuredState IN (@State) AND AccidentDate BETWEEN @StartDate AND @EndDate AND TransactionDate <= @EndDate AND Coverage = 'VehicleComprehensive'
GROUP BY QuoteID,
AccidentDate,
PolicyNumber
),
cte3
AS
(
SELECT
cte1.Quoteid,
cte1.PolicyNumber,
cte1.AccidentDate,
cc.TransactionEffectiveDate,
cc.ClassCode,
CASE
WHEN ROW_NUMBER() OVER (PARTITION BY cte1.QuoteID, cte1.PolicyNumber,cc.AccidentDate ORDER BY (SELECT 0))=1 THEN cte1.PaidLosses
ELSE 0
END as PaidLosses--,
FROM cte1 inner join tblClassCodesPlazaCommercial cc
on cte1.PolicyNumber=cc.PolicyNumber
AND cte1.AccidentDate=cc.AccidentDate
AND cc.AccidentDate IS NOT NULL
/* This is the one that gives me problem */
WHERE cc.ClassCode IN (@ClassCode)
)
SELECT SUM(PaidLosses) as PaidLosses, c.YearNum, c.MonthNum
FROM cte3 RIGHT JOIN tblCalendar c ON c.YearNum = YEAR(cte3.AccidentDate) AND c.MonthNum = MONTH(cte3.AccidentDate)
WHERE c.YearNum <>2017
GROUP BY c.YearNum, c.MonthNum
ORDER BY c.YearNum, c.MonthNum
devとprod環境に対してSSMSでクエリを実行しようとしましたか?同じパフォーマンスの違いが見えますか?もしそうなら、あなたはクエリプランを見ることができます... – SMM
ありがとう、あなたは正しいです。私は2つのテーブルスキャンを持っています。私はこれが問題だと思う – Oleg