我使用值更新ClientFunds.Balance表列,并使用Ouput Inserted.Balance子句将值写入日志表。
有时,写入ClientFunds表的值会被截断,而写入日志表的值始终是正确的。
首先,我在此表中填写了有关ClientFunds表中更新内容的详细信息:
declare @ToUpdate table
(
Id int identity(1,1),
ClientFundId int,
Total decimal (18, 2),
Rate decimal (10, 5)
);
该表将保存要写入日志表的数据:
declare @Updated as table
(
ClientFundId int,
AmountBefore decimal (18,2),
AmountAfter decimal (18,2),
ToUpdateId int
);
以下是我如何更新ClientFunds表,使用@ToUpdate表并将日志信息输出到@Updated表。我已经在这里剪了一些循环细节,但你应该明白这个想法:
WHILE @@FETCH_STATUS = 0
BEGIN
update cf
set cf.Balance = cf.Balance - (up.Total * up.Rate)
OUTPUT INSERTED.Id, DELETED.Balance, INSERTED.Balance, up.Id
INTO @Updated
from @ToUpdate up
join dbo.ClientFunds cf on cf.Id = up.ClientFundId
where up.Id = @CurrentId
FETCH NEXT FROM ToUpdate_Cursor into @CurrentId;
END
现在,正如我所说的,偶尔会将dbo.ClientFunds.Balance值(十进制(18,2))写入数据库,并且小数部分被截断但插入的值输出到@ToUpdate会保留正确的值。
例如,一个例子是14454.36写入@Updated表,最终写入日志文件,但是14454.00被写入dbo.ClientFunds.Balance。
知道会发生什么事吗?
谢谢,
朱