我有一个从SSRS报告运行的存储过程,我现在的问题是我需要在报告中包含上一年的数据。我希望能够使用一组参数运行报告一次,而不是第二次将前几年的数据包含到我的报告中,以便能够逐行比较数据。我所拥有的是创造一个错误。我在SQL Server上有点新,任何帮助都非常感谢。这是在SQL Server 2008中构建的
DECLARE
@StartDate datetime,
@EndDate datetime,
@iClientID int,
@iServiceLevelID int
SET @StartDate = '1-1-13'
SET @EndDate = '12-30-13'
SET @iClientID = null
SET DATEFIRST 7
DECLARE @DATA table(iclientID int,
sClientCode varchar(8),
sClientName varchar(50),
sServiceLevelName varchar(50),
DeailyProductionAverage float,
CorrectionPercentage float,
AverageAging float,
decProduction float,
EffectedDate datetetime,
RepID int,
FirstName varchar(50),
LastName varchar(50),
Completed float)
insert into @DATA
exec procSSRS_ClientPerformanceNew_2 @StartDate,
@EndDate,
@iClientID,
@iServiceLevelID
insert into @DATA
exec procSSRS_ClientPerformanceNew_2 dateadd(year, -1, @StartDate)
dateadd(year, -1, @Enddate)
@iClientID
@iServiceLevelID
答案 0 :(得分:1)
第二次调用该过程时,您在参数列表中缺少逗号。将代码更改为此代码以使其正常工作:
exec procSSRS_ClientPerformanceNew_2
dateadd(year,-1,@StartDate),
dateadd(year,-1,@Enddate),
@iClientID,
@iServiceLevelID
答案 1 :(得分:0)
在SQL Server中,将参数传递给存储过程时,参数可以是常量也可以是变量。它不可能是例如数学表达式,也不是函数调用。
因此,为了使用不同的数据范围再次调用过程,您需要将dateadd
调用的结果存储到变量中并将其用作参数。例如,如果以后不需要原始值,您可以重复使用@StartDate
和@EndDate
:
...
set @StartDate = dateadd(year,-1,@StartDate);
set @EndDate = dateadd(year,-1,@Enddate);
insert into @DATA
exec procSSRS_ClientPerformanceNew_2 @StartDate,
@EndDate,
@iClientID,
@iServiceLevelID
;
或者您可以声明另外两个datetime
变量。