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
问问题
7020 次
4 回答
5
要调用该存储过程并检索输出参数,您可以执行以下操作(例如):
DECLARE @p DECIMAL(8,2)
EXECUTE dbo.StoredProcedure8 123, 456, @p OUTPUT
-- @p now contains the output value
更新:
你不需要使用RETURN
- 你是对的,aRETURN
只能返回一个 INTEGER。但是返回值与您实际使用的 OUTPUT 参数不同。
即从存储过程中获取返回值,是不同的语法:
DECLARE @Result INTEGER
EXECUTE @Result = SomeSproc
于 2010-08-05T07:19:29.657 回答
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 显示的技术 - 您需要将输出值抓取到一个变量中。
于 2010-08-05T07:42:58.083 回答
0
首先,如果必须根据输入参数返回单个值,则不能使用函数存储过程
如果您的 sp 在需要整数时返回小数 - 只需强制转换:SELECT (CAST @d AS INT)
但这非常危险(可能类型溢出)
于 2010-08-05T07:30:00.497 回答
0
如果您的 Column tran_value 是 Decimal 类型,则 @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 也是正确的
于 2010-08-05T07:51:20.673 回答