了解标量变量

时间:2018-04-30 03:05:18

标签: sql stored-procedures

我继承了一份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。它工作得很好,但我不明白它是如何工作的。

任何珍贵的智慧都会受到赞赏。

由于

1 个答案:

答案 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子句中。