Я обнаружил странное поведение, когда хранимая процедура возвращает неточные результаты копейки или два.Является ли этот код 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
отредактирован, чтобы добавить объявление :) –
Единственное, что я не уверен в количестве данных. вы можете попробовать преобразовать денежные поля в десятичные 8,2 и посмотреть, изменились ли результаты – Shawn