Wie man das laufende Gleichgewicht in einem Schuss aktualisiert?

Ich habe einen Temp-Tisch, nennen wir es #invoices, definiert als

create table (id int identity(1, 1), billed money, credited money, balance money) 

Ich habe die folgenden data darin

 Billed Credited 140.00 20.00 60.00 20.00 -20.00 

Ich möchte die Balance- Spalte mit der laufenden Balance aktualisieren. so dass die Balance-Spalte korrekt aktualisiert wird. Balance ist grundsätzlich, Billed – Guthaben, muss aber in die Rechnung der vorherigen Zeile zu nehmen.

Also in meinem Beispiel wird die Balance so sein:

 Billed Credited Balance 140.00 140.00 20.00 160.00 60.00 100.00 20.00 80.00 -20.00 -100.00 

Gibt es einen path, dies zu tun, ohne durch die Zeilen zu schleifen und die laufende Balance zu halten? Grundsätzlich schaue ich, um die Balance-Spalte auf Set-basierte Weise zu aktualisieren.

   

Es gibt set-basierte Möglichkeiten, um laufende Summen in SQL server zu berechnen, aber in den aktuellen Versionen von SQL server eine Cursor-basierte Lösung ist oft schneller.

Adam Machanic schrieb hier einen großartigen Artikel.

Die Antwort triggers sich aus. Ich benutze sie, und es funktioniert schön. Ich habe nicht genau Ihr Setup (es ist etwas seltsam, wenn ich sagen darf), aber im Allgemeinen sind sie der richtige Ansatz hier. Sie müssen sich bewusst sein, um zu bestellen, aber anders als das, sollte es gut sein.