我继承了一份SSRS报告,我需要一些帮助来理解标量变量的工作方式,因为我还没有得到它。
存储过程从下面开始,使用@FromPeriod
和@ToPeriod
运行存储过程没有问题。
CREATE PROCEDURE [dbo].[_SP_STOREDPROCEDURE]
(@FromPeriod int, @ToPeriod Int)
AS
set nocount on
declare @v_FromPeriod int
declare @v_ToPeriod int
declare @cnt int, @periods int
declare @v_periodbegindate datetime
declare @v_YearBegindate datetime
ETC. ETC.
接下来,我有另一个在adhoc基础上运行的脚本,这是我需要帮助的部分:
declare @Period int
declare @PriorPeriod int
select @period = cur_per from tbm_Parms
if right(@Period, 2) <> '01'
begin
set @PriorPeriod = @Period - 1
end
exec [_SP_STOREDPROCEDURE] @PriorPeriod, @PriorPeriod
这是如何工作的?
我的存储过程已定义@FromPeriod
和@ToPeriod
,但使用adhoc脚本则会传递@PriorPeriod
。它工作得很好,但我不明白它是如何工作的。
任何珍贵的智慧都会受到赞赏。
由于
答案 0 :(得分:0)
您的存储过程“[dbo]。[_ SP_STOREDPROCEDURE]”只是对两个参数应用相同的值。
您的参数是:
@FromPeriod int, @ToPeriod Int
您调用:
exec [_SP_STOREDPROCEDURE] @PriorPeriod, @PriorPeriod
假设@PriorPeriod = 5,那就是:
exec [_SP_STOREDPROCEDURE] 5, 5.
现在@FromPeriod包含5.而@ToPeriod /还/包含5。
但是你还没有从_SP_STOREDPROCEDURE给我们足够的代码来解释为什么,根据你的说法,这完全有效。但我猜测答案是在存储过程的WHERE子句中。