首页 > 解决方案 > SQL Server 能否为临时表返回错误的顺序?

问题描述

我在生产中有一个奇怪的问题,我无法在本地开发中重现。请注意,我们有两个基于相同数据库运行的应用程序,但它们返回不同的数据(旧应用程序是正确的)

我有如下一行

UPDATE #ResultTempTable 
SET @@beginningBal = CLoanBal = @@beginningBal + NetChange

这样做的目标是按日期检查行并计算一段时间内的贷款余额。

我遇到的问题是它是从对面开始计算的。我的临时表是按顺序排序的,DESC但计算是根据ASC订单开始的。

有什么明显的可能会脱颖而出吗?在测试生产方面我受到限制。

标签: sql-servertsql

解决方案


这是做你想做的事情的错误方法。正确的方法是使用窗口函数:

WITH toupdate as (
      SELECT rtt.*,
             SUM(NetChange) OVER (ORDER BY ?) as RunningNetChange
      FROM #ResultTempTable rtt
     )
UPDATE toupdate
    SET CLoanBal = @beginningBal + RunningNetChange;

用于指定表顺序的?列。SQL 表表示无序集,因此需要一列来指定排序。


推荐阅读