SQL UPDATE提示更新成功但未修改值,求排查语句及计算问题
问题排查与解决
核心原因:整数除法导致计算结果为0
SQL中两个整数执行除法时会自动取整。你的公式里3 / 100的两个操作数都是整数,计算结果为0,导致更新逻辑实际变成:
SettlementAmount = CollectionAmount - (CollectionAmount * 0)
也就是最终赋值结果和原数值完全一致,所以虽然语句匹配到2行并执行了赋值操作,但数据看起来没有变化。
修复方案
将除法中的任意一个操作数改为浮点数,触发浮点除法计算:
UPDATE [dbo].[QuoteOptions] SET SettlementAmount = CollectionAmount - (CollectionAmount * (3.0 / 100)) FROM [dbo].[Quotes] JOIN [dbo].[QuoteOptions] ON [dbo].[Quotes].Id = [dbo].[QuoteOptions].QuoteId WHERE [dbo].[Quotes].PaymentProfileId = 43 AND SettlementAmount = CollectionAmount
也可以直接用0.03替代3/100,简化计算逻辑:
UPDATE [dbo].[QuoteOptions] SET SettlementAmount = CollectionAmount * 0.97 FROM [dbo].[Quotes] JOIN [dbo].[QuoteOptions] ON [dbo].[Quotes].Id = [dbo].[QuoteOptions].QuoteId WHERE [dbo].[Quotes].PaymentProfileId = 43 AND SettlementAmount = CollectionAmount
验证效果
以你提供的测试数据(CollectionAmount=100)为例:
修复后3.0/100=0.03,计算得100 - (100*0.03)=97,最终SettlementAmount会被更新为97,符合预期。
内容的提问来源于stack exchange,提问作者csharper
相关产品推荐
相关产品推荐

