Trigger für Update erstellen

worm77

Neuer Benutzer
Beiträge
4
Hallo zusammen

Ich muss einen Trigger erstellen, der mir mehrere Felder einer Tabelle updated.
Die Werte, die rein geschrieben werden sollen, kommen aus den gleichen Feldern, derselben Tabelle.

Meine Tabelle sieht so aus:

BelegNr, KrediBeleg, Gewicht, Spediteur
123,,,
124,123,50,Speedy

Nun soll das Gewicht und der Spediteur vom zweiten Datensatz beim ersten eingetragen werden, die Verknüpfung wäre dann BelegNr = KrediBeleg.

Aber irgendwie scheint mir das zu kompliziert zu sein, bringe das nicht hin.

Hab's mit folgendem SQL probiert, hat aber nicht funktioniert:

update buchung
set (Gewicht, Spediteur) = (select Gewicht, Spediteur from Buchung where KrediBeleg is not null)
where BelegNr = KrediBeleg

Kann mir da jemand erklären, wie ich das hinkriege?

Besten Dank für eure Unterstützung

Gruss Rolf
 
Werbung:
Also zunächst mal ist dein Tabellen-Design schlecht. Es stellt sich die Frage warum Informationen redundant abgelegt werden?

Dann verstehe ich die (geplante) Funktionsweise von BelegNr nicht. Warum referenziert BelegNr. auf KrediBeleg? Kannst du die Information nicht über einen Join holen?

Und außerdem, wie soll der Trigger denn verfahren?
- Wann wird BelegNr gesetzt, existiert KrediBeleg da schon?
- Wann feuert der Trigger, bei Insert oder auch bei Update? Verändert Sich BelegNr?
- Verändert sich KrediBeleg oder wird KrediBeleg gelöscht? Ist KrediBeleg immer eindeutig oder gibt es mehrere Datensätze mit dem selben KrediBeleg?

Ohne den Trigger ginge das wie folgt:
Code:
UPDATE tabelle
SET tabelle.Gewicht = t.Gewicht,tabelle.Spediteur = t.Spediteur
FROM tabelle
INNER JOIN tabelle t
ON tabelle.BelegNr = t.KrediBeleg
Aber nochmals, das ist nichts weiter als ein Join über eine sich offenbar selbst referenzierende Tabelle. Das muss man nicht zwingend schreiben wenn man es in einer Abfrage ermitteln kann.
 
Nun, wir haben die längste Zeit auch mit dem Softwarehersteller probiert, eine Liste zu erstellen, die die Daten zusammen sucht und haben's aufgegeben.
Es handelt sich dabei um zwei Kreditoren-Rechnungen, die eine ist die Spedition der ersten. Nun wollen wir eben die Daten von der Speditionsrechnung auf die Lieferantenrechnung übertragen, damit die Liste dann diese Informationen anzeigen kann.
Der Trigger soll beim Insert und Update ausgeführt werden, da es sein kann, dass die Kredi-Rechnungsnummer ändert (falls man sich verschreibt und korrigieren muss).
Die BelegNr hingegen ändert nicht.
Die BelegNr wird vom Programm automatisch vergeben und ändert sich nicht. Zu dem Zeitpunkt existiert der KrediBeleg noch nicht.
 
Müsste das dann nicht eher andersrum sein, also das der zweite Datensatz (Spedition) über seine KrediBeleg-Spalte den ersten Datensatz referenziert? Das klänge geringfügig logischer, denn KrediBeleg ist ja änderbar.
 
Im Feld KrediBeleg gebe ich die Belegnummer der Kreditorenrechnung ein, zu welcher die Speditionsrechnung gehört.
Dann wird das Gewicht und der Spediteur von dieser Speditionsrechnung auf die Kreditorenrechnung geschrieben.
Ich hab den Trigger jetzt erstellt und das funktioniert wunderbar.
Besten Dank für deine Unterstützung.
 
Jetzt war das natürlich ein allgemeiner Join, du aktualisiert mit jedem Trigger der auslöst also alle Datensätze der Tabelle. Ich weiß nicht wie umfangreich das ist, vielleicht möchtest du lieber nur Datensätze nehmen die in INSERTED stehen (also der Tabelle die im Trigger nur betroffene Datensätze bereit stellt). Das wäre zu empfehlen. Allerdings musst du dann berücksichtigen das du wenn du die Speditionsrechnung änderst (der Datensatz steht in INSERTED) die Kreditorenrechnung aktuallisieren musst. In etwa so:
Code:
UPDATE   tabelle --Kreditorenrechnung
SET       tabelle.Gewicht = i.Gewicht,
       tabelle.Spediteur = i.Spediteur
FROM   tabelle --Kreditorenrechnung
INNER JOIN INSERTED i --Speditionsrechnung
ON       tabelle.BelegNr = i.KrediBeleg
Das gilt für Update oder Insert. Delete wird vermutlich keine Rolle spielen, Rechnungen werden ja i.d.R. nicht gelöscht.
 
Werbung:
Zurück
Oben