我正在使用SSRS 2008 R2和報告生成器3.0。我有一個需要幫助的級聯報告問題。第一份報告運行良好。點擊報告中的鏈接將@processID參數傳遞給後續報告。替換2008 R2中的參數SSRS
現在,當在SSMS中直接使用字符串而不是參數運行查詢時,需要1秒鐘的時間。當我通過參數SSRS運行它大約需要15分鐘。我讀過SSRS不能很好地處理參數。我想要做的是找到一種方法來將參數更改爲一個字符串,然後發送,或者如果有人知道更好的方法。
下面是報告運行查詢:
SELECT ResultDetail_View.processOid, ResultDetail_View.applicationId, outputItem.outputValue, ResultDetail_View.startTime, ResultDetail_View.resultStatus,
ResultDetail_View.statusMessage, ResultDetail_View.endTime, ResultDetail_View.ErrRec, COUNT(Summary.Id) AS SumRec
FROM ResultDetail_View LEFT OUTER JOIN
Summary ON ResultDetail_View.processOid = Summary.Id LEFT OUTER JOIN
outputItem ON ResultDetail_View.outputOid = outputItem.outputItemOid
GROUP BY ResultDetail_View.processOid, ResultDetail_View.applicationId, outputItem.outputValue, ResultDetail_View.startTime, ResultDetail_View.resultStatus,
ResultDetail_View.statusMessage, ResultDetail_View.endTime, ResultDetail_View.ErrRec
HAVING (ResultDetail_View.processOid = @processID)
ORDER BY ResultDetail_View.startTime
如何在報表中運行查詢?這是一個存儲過程嗎?如果是這樣,這看起來很像[參數嗅探](https://www.brentozar.com/archive/2013/06/the-elephant-and-the-mouse-or-parameter-sniffing-in-sql-server /)這將阻礙SQL Server選擇最佳查詢計劃的能力。 – iamdave
不幸的是,這些是繼承的報告。這些都是特別格式,而不是存儲過程。我發佈的代碼實際上是運行的數據集查詢。我還沒有找到參數嗅探。爲了以防萬一,我已經進行了重新編譯,並且它在SSRS和SSMS中的使用時間仍然相同。 – bwilliamson
您是否在sql server實例上運行跟蹤以確切地查看報表運行時服務器上正在執行的查詢。一旦你有了這些,如果你直接在同一臺服務器上的SSMS中運行它,你應該得到完全相同的性能(無論是好是壞)。這不是一個答案,但至少應該幫助你調查問題。 –