1

我需要你的帮助:

我想获得金额字段的总和,它包含十进制值,但我只得到INTEGER部分,我也需要DECIMAL

DECLARE @TOTAL AS DECIMAL(13,2)

SET @Total = (SELECT SUM(Amount)
              FROM t_DownPmtTrans
              WHERE MortgageID = @MortgageID 
                AND DatePaid IS NULL 
                AND SchedPayment IS NOT NULL)

我尝试过使用 CURSOR 但我得到了相同的结果:

OPEN dpt_cursor 
SET @Total= 0.0

FETCH NEXT FROM dpt_cursor INTO @DownPmtTransID, @Amount

WHILE @@FETCH_STATUS= 0 
BEGIN

   PRINT @Amount
   SET @Total = (@Total + @Amount)

   FETCH NEXT FROM dpt_cursor
     INTO @DownPmtTransID, @Amount
END 

RETURN  @Total* (-1)
CLOSE dpt_cursor 
DEALLOCATE dpt_cursor

谢谢!!

4

3 回答 3

2

根据MSDN,如果表达式是decimalsum将返回decimal(38, s)。确保数据类型是amountis decimal。或尝试将其转换为decimalusingcastconvert. 此选项可能会对您有所帮助。

于 2013-04-08T18:34:21.057 回答
2

您需要设置精度和比例而不是大小 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.scale(v=vs.100).aspx

var outputParameter = new SqlParameter
{
    Direction = ParameterDirection.Output,
    ParameterName = "your parameter name in your stored procedure",
    SqlDbType = SqlDbType.Decimal,
    Precision = 13,
    Scale = 2
};

声明一个 SQL 参数数组并将参数添加到其中

var parameters = new SqlParameter[1];
parameters[0] = outputParameter

声明一个命令对象

var command = new SqlCommand (); //don't forget everything else
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "stored procedure name"
command.Parameters.AddRange (parameters);

执行你的命令

command.ExecuteNonQuery ();

现在从参数集合中读取值

var value = (decimal) command.Parameters[0].Value;
于 2013-09-10T16:18:03.593 回答
1

我也无法复制,但无论如何将要求和的列转换为变量的数据类型应该可以得到你想要的。情况并非如此的唯一原因是如果“金额”是一个整数......

DECLARE @TOTAL AS DECIMAL(13,2)

SET     @Total =   (SELECT  SUM(Convert(DECIMAL(13,2),Amount))
                    FROM    t_DownPmtTrans
                    WHERE   MortgageID = @MortgageID 
                    AND     DatePaid IS NULL 
                    AND     SchedPayment IS NOT NULL)

由于问题不在 SQL 范围内,我进行了快速搜索,发现:http ://forums.asp.net/t/33723.aspx/1

根据它,这是一个已知问题。我环顾四周,虽然这个人没有说它有帮助,但我建议创建一个 SqlParameter 对象,以便您可以设置对象的精度属性,然后将其传递给您的 Add 方法。

于 2013-04-08T18:29:37.453 回答