在执行存储过程时声明参数

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

标签: sql-server stored-procedures

我已经创建了一个测试存储过程,用于从视图中提取所选记录。我使用Sql Server Management Studio 2012.我用来创建它的代码是:

create procedure [dbo].[andytest]
@CpnyID char(3)
, @FiscYr char(4)
, @LedgerID char(10)
, @Acct char(10)
as select * From dbo.view_Normal_AcctHist_Leads_AllEntities
where CpnyID in(@CpnyID)
and FiscYr in(@FiscYr)
and LedgerID in(@LedgerID)
and Acct in(@Acct)

执行时我使用:

exec andytest
   @CpnyID= '131'
  ,@FiscYr='2014'
  ,@LedgerID='Actual'
  ,@Acct='637100'

我注意到当我将程序编写为'执行'时,来的代码是:

DECLARE @CpnyID char(3)
DECLARE @FiscYr char(4)
DECLARE @LedgerID char(10)
DECLARE @Acct char(10)

-- TODO: Set parameter values here.
set @CpnyID= '131'
set @FiscYr='2014'
set @LedgerID='Actual'
set @Acct='637100'

EXECUTE [dbo].[andytest] 
   @CpnyID
  ,@FiscYr
  ,@LedgerID
  ,@Acct

我的问题是为什么在创建过程时定义的变量需要在执行时重新声明,并且在这种特殊情况下我应该使用哪种方法?

此致 安迪

2 个答案:

答案 0 :(得分:1)

你是否像这样执行......

DECLARE @CpnyID char(3)
DECLARE @FiscYr char(4)
DECLARE @LedgerID char(10)
DECLARE @Acct char(10)

-- TODO: Set parameter values here.
set @CpnyID   = '131'
set @FiscYr   = '2014'
set @LedgerID = 'Actual'
set @Acct     = '637100'

EXECUTE [dbo].[andytest]   @CpnyID   = @CpnyID
                          ,@FiscYr   = @FiscYr
                          ,@LedgerID = @LedgerID
                          ,@Acct     = @Acct

或者你直接将值传递给像这样的过程变量......

EXECUTE [dbo].[andytest]   @CpnyID   = '131'
                          ,@FiscYr   = '2014'
                          ,@LedgerID = 'Actual'
                          ,@Acct     = '637100'

它没有任何区别,当您从另一个过程或API或某种其他应用程序获取这些值时,使用唯一的变量。

因此,您声明变量并从其他源传递的值填充它们,并将它们传递给此过程。否则功能明智没有区别。

答案 1 :(得分:0)

变量未被重新声明,即存储过程不需要这样做。查询窗口要求您在为此查询窗口分配值之前声明变量。您可以使用实际值替换变量。

EXEC    @return_value = [dbo].[andytest]
        @CpnyID = N'2',
        @FiscYr = N'2',
        @LedgerID = N'3',
        @Acct = N'4'