Hilfe bei SQL Trigger
bearbeitet von AugeHallo
> > [...] und dass ein `UPDATE` meines Wissens nach nicht mit `SET` arbeitet
>
> Das SET ist sogar ein zwingend notwendiger Bestandteil eines Update-Statements.
Stimmt, ich war gedanklich <del>einerseits bei der Schreibweise, die MySQL anbietet und die analog zu `INSERT` funktioniert und andererseits</del> bei `SET` and Befehl zur Änderung einer Variablen ausßerhalb eines Queries.
Ich sollte Feierabend machen.
> > also abgesehen von den nicht schlüssigen Dingen, sieht der Code schlüssig aus.
>
> Was ist, wenn der Update-Trigger mit dem UPDATE drin den Update-Trigger triggert?
Gute Frage. Ich benutze in MS SQL einen Trigger `AFTER UPDATE`, in dem die Ausführung zusätzlich mit `IF UPDATE ([Feldname])` auf die Reaktion auf die Änderung dieses bestimmten Feldes beschränkt wird, dessen Wert zu allem Überfluss innerhalb des Triggers geändert wird. Deine Frage impliziert die Vermutung, dass der Trigger in einer Endlosschleife landen müsste. Das tut er aber nicht.
> Zudem setzt der Trigger das Flag immer und nicht nur wenn die beiden Felder geändert wurden.
Wir enden also bei „abgesehen von *weiteren* als den vorgenannten Bedingungen“. 😀
> ----
> Bei MySQL jedenfalls würde ich einen BEFORE-Trigger nehmen, aber der MS SQL Server hat sowas wohl nicht. Mit dem kann man Werte vor dem Speichern anpassen.
Die [MS-SQL-Doku](https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql) nennt in dieser Hinsicht `FOR`, `AFTER` und `INSTEAD OF` als mögliche Werte. `AFTER` und `INSTEAD OF` sind mMn selbsterklärend, zu `FOR` schweigt sich *die verlinkte Seite* allerdings leider aus.
Tschö, Auge
--
Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
Toller Dampf voraus von Terry Pratchett
Hilfe bei SQL Trigger
bearbeitet von AugeHallo
> > [...] und dass ein `UPDATE` meines Wissens nach nicht mit `SET` arbeitet
>
> Das SET ist sogar ein zwingend notwendiger Bestandteil eines Update-Statements.
Stimmt, ich war gedanklich einerseits bei der Schreibweise, die MySQL anbietet und die analog zu `INSERT` funktioniert und andererseits bei `SET` and Befehl zur Änderung einer Variablen ausßerhalb eines Queries.
> > also abgesehen von den nicht schlüssigen Dingen, sieht der Code schlüssig aus.
>
> Was ist, wenn der Update-Trigger mit dem UPDATE drin den Update-Trigger triggert?
Gute Frage. Ich benutze in MS SQL einen Trigger `AFTER UPDATE`, in dem die Ausführung zusätzlich mit `IF UPDATE ([Feldname])` auf die Reaktion auf die Änderung dieses bestimmten Feldes beschränkt wird, dessen Wert zu allem Überfluss innerhalb des Triggers geändert wird. Deine Frage impliziert die Vermutung, dass der Trigger in einer Endlosschleife landen müsste. Das tut er aber nicht.
> Zudem setzt der Trigger das Flag immer und nicht nur wenn die beiden Felder geändert wurden.
Wir enden also bei „abgesehen von *weiteren* als den vorgenannten Bedingungen“. 😀
> ----
> Bei MySQL jedenfalls würde ich einen BEFORE-Trigger nehmen, aber der MS SQL Server hat sowas wohl nicht. Mit dem kann man Werte vor dem Speichern anpassen.
Die [MS-SQL-Doku](https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql) nennt in dieser Hinsicht `FOR`, `AFTER` und `INSTEAD OF` als mögliche Werte. `AFTER` und `INSTEAD OF` sind mMn selbsterklärend, zu `FOR` schweigt sich *die verlinkte Seite* allerdings leider aus.
Tschö, Auge
--
Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
Toller Dampf voraus von Terry Pratchett