sql-server - 简单数学存储过程返回 NULL?

标签 sql-server sql-server-2005 tsql stored-procedures

如果有人能让我知道为什么这个存储过程返回 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 个 NULL

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

最佳答案

您根本没有用 OUTPUT 修饰调用中的输出参数:

EXEC calc_runningtotal_averageprice_realisedpl 1, 1, 2, 2, 
   @new_running_total OUTPUT, 
   @new_average_price OUTPUT, 
   @realised_pl OUTPUT

关于sql-server - 简单数学存储过程返回 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7076226/

相关文章:

c# - 在MVC中调用存储过程

tsql - 从 sp_executsql 插入临时表

c# - 长事务的死锁

sql - 将左侧的 varchar 填充到一定长度的最有效的 T-SQL 方法?

asp.net-mvc - 使用 .net MVC View 将 csv 或 excel 文件导入 SQL Server 2005 的最佳方法

sql-server - 如何检查 SQL Server 中的阻塞查询

SQL Server 在 select 语句中使用聚合函数连接记录

sql - 带有可变种子的 DATEDIFF

c# - 使用游标从使用 C# 的 SQL Server 读取时间序列数据?

sql - 仅从日期时间获取日期时 - 哪个最好,为什么?