我发现了一些奇怪的行为,存储过程以一两分钱返回不准确的结果。此SQL代码是否容易出现舍入错误?
下面的代码(我没有写):
ALTER PROCEDURE [dbo].[TN_GetSimpleBalance]
@custID int,
@nBalance decimal (8,2) output
AS
declare @ArBalance as decimal (8,2)
declare @custStatusCode varchar (2)
declare @unbilledCallsAmount as decimal (8,2)
set @nBalance = 0
set @ArBalance = 0
set @custstatusCode = ''
set @unbilledCallsAmount = 0
SET NOCOUNT ON
select @unbilledCallsAmount = isnull(sum(callcharge+taxamount),0)
from call with (NOLOCK) where custid = @custID and callstatuscode in ('R', 'B')
--get AR balance
select @ArBalance = isnull(sum(amount),0)
from artran with (NOLOCK)
where custid = @custID AND POSTEDFLAG ='Y'
set @nBalance = @unbilledCallsAmount + @ArBalance
@nBalance
被显示为零,即使另一个应用是告诉我的客户已经$ .02。 callcharge
和taxamount
都是货币数据类型。
这是我第一次遇到这样的情况,但我把一些相关的代码来生产,已经被“请”来研究这个。
你有什么需要?货币和小数数据类型之间有没有奇怪的地方?你认为还有什么可以解释这一点?
@nBalance在哪里申报? – Shawn 2009-09-25 18:33:52
编辑添加声明:) – 2009-09-25 18:34:57
我不知道的唯一的东西是金额数据类型。你可以尝试转换的钱字段小数8,2,如果结果改变 – Shawn 2009-09-25 18:37:48