2016-04-28 6 views
1

Ich versuche, eine Tabelle zu aktualisieren, wie ein Trigger aufgerufen wird, und ich bekomme einen Syntaxfehler in der Update-Anweisung.SQL-Syntaxfehler beim Update im Trigger mit Variable

BODY OF-Trigger:

set @diff = old.amount -new.amount; 
UPDATE decks 
SET decktotal = decktotal + @diff 
WHERE deckname = old.deckname; 

Ich will mehr Informationen hinzufügen, wenn nötig, aber ich denke, dies eine Besonderheit dumme Versehen meinerseits zu sein, die leicht behoben ist. Danke für den Blick in beide Richtungen!

EDIT: ERROR 1064 Fehler in der Syntax bei

UPDATE decks 
SET decktotal = decktotal + @diff 
FROM old 
WHERE deckname = old.deckname; 
+0

'erklären @diff money' vielleicht? – Arvo

+2

Tag dbms, dieser Code ist produktspezifisch. – jarlh

+0

@a_horse_with_no_name MySQL – bloopiebloopie

Antwort

1

Ich nehme an, das Problem, das Sie haben, in der ist, wo Klausel Sie verwenden:

WHERE deckname = old.deckname; 

das Problem mit diesem ist Tabelle alt nicht im Update angegeben. Um dies zu lösen, erstellen Sie eine Variable und weisen Sie sie dem Decknamen in der where-Klausel zu. Oder nach dem Set müssen Sie die Tabelle alt hinzufügen.

Solution1:

declare @old_name varchar(20);  //Disregard if you don't need to declare 
select @old_name = old.deckname; 
SET @diff = old.amount -new.amount; 
UPDATE decks 
SET decktotal = decktotal + @diff 
WHERE deckname = @old_name; 

Solution2:

SET @diff = old.amount -new.amount; 
UPDATE decks 
SET decktotal = decktotal + @diff 
FROM old 
WHERE deckname = old.deckname; 
+0

Hey, was meinst du nach dem Set muss ich die Tabelle alt hinzufügen? Vielen Dank! Auch die Solution2 ist was ich angefangen habe und ja der Fehler ist in der Where-Klausel. – bloopiebloopie

+0

Schauen Sie sich "solution2" an. Wenn Sie in der where-Klausel "deckname = old.deckname" referenzieren, müssen Sie "FROM" alt verwenden, weil Sie auf diese Tabelle in Ihrer where-Klausel verweisen. Oder was ist der genaue Fehler, den Sie erhalten? – Stivan

+0

Oh Entschuldigung habe ich nicht gesehen, ich werde es jetzt versuchen. – bloopiebloopie