palaber
Captain
- Registriert
- Juni 2006
- Beiträge
- 3.856
Hallo Leute,
ich hänge mal wieder - Ganz grob gesagt würde ich gerne einen Trigger verwenden um eine bestimmte Operation auszuführen sobald ich einen INSERT auf einer Tabelle ausführe. Dazu soll bei einem INSERT Befehl die Daten der Tabelle "inserted" verwendet werden und automatisch zu anderen Datensätzen der Tabelle (auf der der INSERT Befehl ausgeführt wurde) hinzugefügt werden.
Grundlage hierzu ist eine Tabelle, nennen wir sie tblPreisliste mit folgenden Spalten (mit Beispieldaten):
Preisliste | Artikel | Preis | AbDatum
A | 642 | 1,00 | 01.01.15
B | 642 | 1,50 | 01.01.15
A | 200 | 1,00 | 01.01.15
A | 199 | 1,00 | 01.01.15
Zusätzlich gibt es noch eine Tabelle tblReferenz (sehr vereinfacht dargestellt)
Artikel | ReferenzArtikel
199 | 642
200 | 642
Diese Tabelle gibt an welche Artikel durch einen INSERT eines Artikels der tblPreisliste mit versorgt werden müssen.
Sprich wird in tblPreisliste für den Artikel 642 eine neue Preisliste erstellt müssen die Artikel 199 und 200 die selben Daten erhalten:
Preisliste | Artikel | Preis | AbDatum
C | 642 | 2,00 | 01.02.15 <--- INSERT Anweisung soll diesen Datensätze erzeugen
C | 199 | 2,00 | 01.02.15 <--- automatisch durch Trigger
C | 200 | 2,00 | 01.02.15 <--- automatisch durch Trigger
Anbei mein aktueller Trigger, der sich noch nicht auswirkt:
Irgendwie dachte ich kann es mit nem einfachen INSERT INTO lösen. Langsam denke ich aber, ich benötige sowas wie nen Cursor oder eine Schleife inkl. tmpTabelle. Dann könnte ich ja alle Artikel mit dem ReferenzArtikel 642 durchlaufen und in der tblPreislisten einfügen (mit INSERT INTO ... VALUES...). Hab aber irgendwie im Hinterkopf, das es mit dem obigen INSERT INTO performanter ist und es auch gehen sollte. Allerdings komm ich einfach nicht drauf wie ich vorgehen muss.
Danke für eure Hilfe!
ich hänge mal wieder - Ganz grob gesagt würde ich gerne einen Trigger verwenden um eine bestimmte Operation auszuführen sobald ich einen INSERT auf einer Tabelle ausführe. Dazu soll bei einem INSERT Befehl die Daten der Tabelle "inserted" verwendet werden und automatisch zu anderen Datensätzen der Tabelle (auf der der INSERT Befehl ausgeführt wurde) hinzugefügt werden.
Grundlage hierzu ist eine Tabelle, nennen wir sie tblPreisliste mit folgenden Spalten (mit Beispieldaten):
Preisliste | Artikel | Preis | AbDatum
A | 642 | 1,00 | 01.01.15
B | 642 | 1,50 | 01.01.15
A | 200 | 1,00 | 01.01.15
A | 199 | 1,00 | 01.01.15
Zusätzlich gibt es noch eine Tabelle tblReferenz (sehr vereinfacht dargestellt)
Artikel | ReferenzArtikel
199 | 642
200 | 642
Diese Tabelle gibt an welche Artikel durch einen INSERT eines Artikels der tblPreisliste mit versorgt werden müssen.
Sprich wird in tblPreisliste für den Artikel 642 eine neue Preisliste erstellt müssen die Artikel 199 und 200 die selben Daten erhalten:
Preisliste | Artikel | Preis | AbDatum
C | 642 | 2,00 | 01.02.15 <--- INSERT Anweisung soll diesen Datensätze erzeugen
C | 199 | 2,00 | 01.02.15 <--- automatisch durch Trigger
C | 200 | 2,00 | 01.02.15 <--- automatisch durch Trigger
Anbei mein aktueller Trigger, der sich noch nicht auswirkt:
Code:
ALTER TRIGGER TriggerTest 'Triggername'
ON tblPreisliste 'Tabelle die für Trigger verwendet wird'
AFTER INSERT
AS
BEGIN
INSERT INTO tblPreisliste (Preisliste, Artikel, Preis, DatumAb)
SELECT inserted.Preisliste, BGARTIKEL.ARartikelnr, inserted.Preis, inserted.DatumAb
FROM inserted INNER JOIN tblReferenz ON tblReferenz.Artikel = inserted.PLartikelnr
'zur verbesserten Übersicht wurde hier Artikelnr fest hinterlegt...'
WHERE tblReferenz.ReferenzArtikel = '642'
END
Irgendwie dachte ich kann es mit nem einfachen INSERT INTO lösen. Langsam denke ich aber, ich benötige sowas wie nen Cursor oder eine Schleife inkl. tmpTabelle. Dann könnte ich ja alle Artikel mit dem ReferenzArtikel 642 durchlaufen und in der tblPreislisten einfügen (mit INSERT INTO ... VALUES...). Hab aber irgendwie im Hinterkopf, das es mit dem obigen INSERT INTO performanter ist und es auch gehen sollte. Allerdings komm ich einfach nicht drauf wie ich vorgehen muss.
Danke für eure Hilfe!
Zuletzt bearbeitet: