SSRS速度慢但SSMS速度快

时间:2014-01-05 01:12:10

标签: sql

我有一个在SSMS中运行速度很快但在SSRS中运行速度很慢的查询。当我在寻找解决方案时,我在下面提供了这个解决方案,由user275554提供

"感谢您提供的建议。我们找到了一个解决方案,结果确实与参数有关。由于'参数嗅探,SQL Server在从SSRS报告执行时产生了一个复杂的执行计划。解决方法是在存储过程内部声明变量,并将传入参数分配给变量。然后查询使用变量而不是参数。这导致查询始终执行,无论是从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

有人可以帮助我如何分配参数以使用解决方案提供的变量。

由于 祢

2 个答案:

答案 0 :(得分:0)

有关参数嗅探,性能问题和解决方案的详细说明,请参阅this article

由于它是一个报告程序,我猜是解决这个问题的最简单方法是将WITH RECOMPILE添加到CREATE PROC语句中,这意味着SQL Server每次都会重新编译proc#&# 39;运行,因此将根据您调用它的参数计算出最佳查询计划,而不是您之前使用的参数。

答案 1 :(得分:0)

这是将参数传递给Stored Proc然后创建局部变量以防止参数嗅探的正确格式。如前所述,您还可以添加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