Ich schreibe eine Abfrage, die die Abstimmung eines Nutzers ( ForumVotes ) für einen Forenbeitrag aktualisiert ( ForumPosts ). Benutzer können nach oben oder unten abstimmen (die Bewertung ist gleich 1 oder -1). Diese Frage bezieht sich nur auf die Änderung der Abstimmung eines Nutzers. Daher existiert bereits ein Abstimmungsdatensatz in der Tabelle ForumVotes .
In der Tabelle ForumPosts wird die Gesamtpunktzahl für jeden Beitrag gespeichert. Daher muss dieses Feld synchron bleiben. Um die Gesamtpunktzahl neu zu berechnen, muss ich zuerst die alte Stimme abziehen, bevor ich die neue stimme, also muss ich die alte Stimme holen, bevor ich den Stimmdatensatz des Benutzers aktualisiere.
Ich weiß, dass ich dies mit zwei Abfragen tun kann, aber ich frage mich, ob es möglich ist (in SQL Server 2008), dass ein UPDATE den Wert einer Spalte vor der Aktualisierung zurückgibt?
Hier ist ein Beispiel:
%Vor%Eine einfache Abfrage zum Aktualisieren der Benutzerabstimmung
%Vor%Kann diese Abfrage so geändert werden, dass die alte Punktzahl vor der Aktualisierung zurückgegeben wird?
Ich werde @ HLGEMs Antwort erweitern, indem ich zeige, dass Sie keine intermediate Tabelle @previous
benötigen. Sie können sich darauf verlassen, dass OUTPUT
Daten direkt ohne Variablen zurückgibt, nur Aliasing:
Wenn Sie dies direkt ausführen, erhalten Sie eine Tabelle mit 1 Datenzeile und 2 Spalten: NewScore
und OldSCore
.
Tags und Links sql sql-server sql-server-2008