【发布时间】:2011-10-27 22:06:00
【问题描述】:
如果有人能告诉我为什么这个存储过程返回 NULL(我使用的是 SQL Server 2005),我将不胜感激?感谢您的帮助。
CREATE PROCEDURE calc_runningtotal_averageprice_realisedpl
@filled_size REAL,
@reported_execution REAL,
@old_running_total REAL,
@old_average_price REAL,
@new_running_total REAL OUTPUT,
@new_average_price REAL OUTPUT,
@realised_pl REAL OUTPUT
AS
BEGIN
SET @new_running_total = @old_running_total + @filled_size
SET @realised_pl = 0
IF SIGN(@filled_size) = SIGN(@old_running_total)
BEGIN
SET @new_average_price = (@filled_size * @reported_execution + @old_running_total * @old_average_price) / (@new_running_total)
END
ELSE
BEGIN
DECLARE @quantity REAL
IF ABS(@reported_execution) < ABS(@old_running_total)
SET @quantity = ABS(@reported_execution)
ELSE
SET @quantity = ABS(@old_running_total);
SET @realised_pl = (@reported_execution - @old_average_price) * @quantity * SIGN(@filled_size) * -1;
SET @new_average_price =
CASE
WHEN ABS(@filled_size) < ABS(@old_running_total) THEN @old_average_price
WHEN ABS(@filled_size) = ABS(@old_running_total) THEN 0
WHEN ABS(@filled_size) > ABS(@old_running_total) THEN @reported_execution
END
END
END
如果我运行以下命令,我会得到 3 个 NULLS
DECLARE @new_running_total REAL
DECLARE @new_average_price REAL
DECLARE @realised_pl REAL
EXEC calc_runningtotal_averageprice_realisedpl 1, 1, 2, 2, @new_running_total, @new_average_price, @realised_pl
SELECT @new_running_total, @new_average_price, @realised_pl
我期待类似 3、1.66666、0
【问题讨论】:
-
根据 Alex K. 的解决方案。事实上,在我使用过的大多数语言中,您需要在调用语句中使用某种关键字显式指定一个变量是通过引用传递的。
标签: sql-server sql-server-2005 tsql stored-procedures