使用单个过程运行1个过程两次

时间:2014-07-09 03:40:18

标签: sql sql-server-2008

我有一个从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  

2 个答案:

答案 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变量。