Может ли SQL Server вернуть неправильный порядок для временной таблицы? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть странная проблема с производством, которую я не могу воспроизвести в своем местном развитии. Обратите внимание, что у нас есть два приложения, работающие на базе одной и той же БД, но они возвращают разные данные (старое приложение является правильным)

У меня есть строка, подобная следующей

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

Цель этого состоит в том, чтобы просмотреть строки по дате и рассчитать остаток займа с течением времени.

Проблема, с которой я сталкиваюсь, заключается в том, что она начинает вычисления с противоположной стороны. Моя временная таблица упорядочена по DESC, но расчет начинается на основании ASC.

Что-нибудь очевидное, что может выделиться? Я ограничен, когда дело доходит до тестирования производства.

1 Ответ

4 голосов
/ 12 апреля 2019

Это неправильный способ делать то, что вы хотите.Правильный способ - использовать оконные функции:

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

? для столбца, который определяет порядок таблицы.Таблицы SQL представляют неупорядоченные наборы, поэтому для указания порядка необходим столбец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...