SQL Server - Kann ein vorhandener Spaltenwert vor einer Zeilenaktualisierung zurückgegeben werden?

7

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?

    
Redtopia 21.12.2012, 20:23
quelle

3 Antworten

12

Probieren Sie die OUTPUT-Klausel:

%Vor%     
HLGEM 21.12.2012, 20:28
quelle
6

Wenn es ein single row affected query (ie; update using key(s)) ist, dann

%Vor%     
Kaf 21.12.2012 20:38
quelle
3

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:

%Vor%

Wenn Sie dies direkt ausführen, erhalten Sie eine Tabelle mit 1 Datenzeile und 2 Spalten: NewScore und OldSCore .

    
Dai 27.04.2016 04:26
quelle

Tags und Links