2014-01-05 4 views
1

У меня есть запрос, который работает быстро в SSMS, но работает очень медленно в SSRS и Как я искал решение, я пришел об этом решении ниже представленного user275554Медленные в SSRS, но быстро в SSMS

«Спасибо за предложения, приведенные здесь. Мы нашли решение, и оно оказалось связанным с параметрами. SQL Server создавал свернутый план выполнения при выполнении из отчета SSRS из-за «snuffing параметров». Обходным путем было объявить переменные внутри хранимой процедуры и назначить входящие параметры для переменных. Затем в запросе использовались переменные, а не параметры. Это привело к тому, что запрос выполнялся последовательно, вызван ли из диспетчера SQL Server или из отчета SSRS ».

Моя проблема в том, что я попытался назначить параметры для переменных, но, похоже, я действительно не знаю, как это сделать, чтобы в отчете не производилось никаких данных.

Пример того, что я попытался это:

CREATE PROC MissingData 

AS 

DECLARE @Office varchar (200) 
DECLARE @employee varchar (100) 

SET @Office = @Office -- @office is the parameter from SSRS 
SET @employee = @employee-- @employee is the parameter FROM SSRS 

Может кто-то поможет мне о том, как назначить параметр, чтобы использовать переменные, как это предусмотрено решением.

Благодаря Mi

+1

можете ли вы добавить ссылку на этот ответ, откуда вы получили это решение? –

+0

Ссылка, в которой я получил это решение, - http://stackoverflow.com/questions/2283943/fast-query-runs-slow-in-ssrs – user2809139

ответ

0

См this article хорошее объяснение параметра нюхает, проблемы производительности и решения.

Поскольку это процедура отчетности моя догадка это самый простой способ обойти это, чтобы добавить WITH RECOMPILE к CREATE PROC заявления, что означает SQL Server перекомпилирует процедурный каждый раз, когда он запущен, и поэтому будет работать лучший план запроса на основе по параметрам, с которыми вы его вызываете, а не по параметрам, с которыми вы ранее звонили.

0

Это правильный формат для передачи параметров хранимому Proc, а затем создайте локальные переменные, чтобы предотвратить sniffing параметров. Как уже упоминалось, вы также можете добавить WITH RECOMPILE

CREATE PROC MissingData 
    @Office varchar(200) 
    ,@employee varchar(100) 
WITH RECOMPILE 
AS 

DECLARE @ramOffice varchar (200) 
DECLARE @ramEmployee varchar (100) 

SET @ramOffice = @Office -- @office is the parameter from SSRS 
SET @ramemployee = @employee-- @employee is the parameter FROM SSRS 
Смежные вопросы