更新值并将插入的值输出到日志表

时间:2015-09-17 12:17:45

标签: sql-server tsql

我使用值更新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。

知道会发生什么事吗?

谢谢,

0 个答案:

没有答案