我需要你的帮助:
我想得到Amount字段的SUM,它包含十进制值,但我只得到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
谢谢!
答案 0 :(得分:2)
根据MSDN,如果表达式为decimal
,则sum
将返回decimal(38, s)
。确保数据类型为amount
为decimal
。或者尝试使用decimal
或cast
将其转换为convert
。这些选项可能对您有所帮助。
答案 1 :(得分: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;
答案 2 :(得分:1)
我也无法复制,但无论如何转换列,你总结到变量的数据类型应该可以得到你想要的。这种情况的唯一原因是,如果" Amount"是一个int ...
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对象,所以你可以设置对象的precision属性,然后在Add方法中传递它。