使用存储过程输出参数

时间:2010-08-05 07:16:21

标签: sql sql-server-2005 tsql stored-procedures output-parameter

ALTER PROCEDURE dbo.StoredProcedure8
@emp_code bigint,
@co_id bigint,
@p decimal(8,2) output

AS

SELECT @p = (select sum(tran_value) from emp_ded_ben_trans where emp_code=@emp_code and co_id=@co_id and period_flg=2 and tax_flg=0)

RETURN  

4 个答案:

答案 0 :(得分:5)

要调用该sproc并检索输出参数,您可以(例如):

DECLARE @p DECIMAL(8,2)
EXECUTE dbo.StoredProcedure8 123, 456, @p OUTPUT
-- @p now contains the output value

<强>更新

您不需要使用RETURN - 您是对的,RETURN只能返回INTEGER。但是返回值与OUTPUT参数不同,这是您实际使用的参数。

即。从sproc获取RETURN值是不同的语法:

DECLARE @Result INTEGER
EXECUTE @Result = SomeSproc

答案 1 :(得分:2)

存储过程不是为了“返回值” - 这就是你为...存储的函数。

CREATE FUNCTION dbo.CalculateSomething
  (@emp_code bigint, @co_id bigint)
RETURNS DECIMAL(8, 2)
AS BEGIN    
    RETURN
      (SELECT SUM(tran_value) 
       FROM dbo.emp_ded_ben_trans 
       WHERE 
          emp_code = @emp_code AND co_id = @co_id  
          AND period_flg = 2  AND tax_flg = 0)
END

然后你可以这样调用这个存储的函数:

SELECT dbo.CalculateSomething(value_for_emp_code, value_for_co_id)

从计算中返回DECIMAL(8,2)。

存储过程将返回受其操作影响的行数 - INT。

如果需要从存储过程中返回一个值,则需要使用OUTPUT参数类型并使用AdaTheDev显示的技术 - 您需要将输出值获取到变量中。

答案 2 :(得分:0)

首先,如果必须根据输入参数返回单个值,则不能使用函数的存储过程

如果你的sp在需要整数时返回十进制 - 只需转换:SELECT (CAST @d AS INT)但这非常危险(可能的类型溢出)

答案 3 :(得分:0)

如果您的列tran_value是十进制类型,则运行查询后@p将具有十进制值...

Create Table #test
(ID1 Int,
ID2 Decimal(8,2)
)

Insert into #test Values (1,1.1)
Insert into #test Values (2,2.2)
Insert into #test Values (3,3.3)

Declare @p Decimal(8,2), @intp int

Select @intp = Sum(ID1), @p = Sum(ID2) from #test

Select @intp as IntegerSum, @p as DecimalSum

Drop Table #test

输出

IntegerSum  DecimalSum
----------- ---------------------------------------
6           6.60

注意:您无需执行任何特定操作即可通过输出参数从存储过程返回值...只需将值分配给SP内的输出参数,它将自动返回给调用者。 /强>

这意味着即使没有return语句,您的SP也是正确的