2016-11-21 12 views
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 
+0

devとprod環境に対してSSMSでクエリを実行しようとしましたか?同じパフォーマンスの違いが見えますか?もしそうなら、あなたはクエリプランを見ることができます... – SMM

+0

ありがとう、あなたは正しいです。私は2つのテーブルスキャンを持っています。私はこれが問題だと思う – Oleg

答えて

0

は、インデックスと統計は、ワークロードを必要なものを見るためにチューニング・アドバイザを使用します。それらを作成した後、すべて正常に動作します。

関連する問題