Trigger soll anderen Trigger triggern
JCB
- datenbank
0 dey0 Vinzenz Mai0 JCB
Hallo!
Ich habe eine SQL 2000 DB. Darin u.A. enthalten sind 3 Tabellen:
Diese 3 Tabellen sind wie folgt miteinander verknüpft:
Tab1 hat Childdatensätze in Tab2
und
Tab2 hat Childdatensätze in Tab3
Tab1 besitzt einen Trigger, der, wenn in Tab1 ein Datensatz gelöscht wird, alle Childdatensätze in Tab2 löscht.
Tab2 besitzt einen Trigger, der, wenn in Tab2 ein Datensatz gelöscht wird, alle Childdatensätze in Tab3 löscht.
Beide Trigger funktionieren im Prinzip einandfrei.
D.h. wenn ich in Tab2 einen Datensatz lösche, werden auch alle entsprechenden Childdatensätze in Tab3 gelöscht. Lösche ich in Tab1 einen Datensatz, werden auch die entsprechenden Childdatensätze in Tab2 gelöscht. Jedoch wird dann scheinbar nicht der Trigger von Tab2 ausgelöst, so dass auch die entsprechenden Childdatensätze von Tab2 in Tab3 gelöscht werden.
Kurz formuliert: Der Trigger von Tab1 löst nicht den Trigger von Tab2 aus.
Geht das generell nicht oder gibts da einen Trick? Oder wie oder was?
Für jegliche Hilfe/Anwort bin ich dankbar :).
Gruß, Jan
Hallo,
Für jegliche Hilfe/Anwort bin ich dankbar :).
Vielleicht kann der Trigger unterscheiden, was die Änderung ausgelöst hat, externer oder interner Prozess und reagiert nicht auf intern.
Bei Oracle hatte ich mal das umgekehrte Problem und wäre für eine derartige Unterscheidung dankbar gewesen.
bydey
Hallo
Ich habe eine SQL 2000 DB. Darin u.A. enthalten sind 3 Tabellen:
Diese 3 Tabellen sind wie folgt miteinander verknüpft:Tab1 hat Childdatensätze in Tab2
und
Tab2 hat Childdatensätze in Tab3
Tab1 besitzt einen Trigger, der, wenn in Tab1 ein Datensatz gelöscht wird, alle Childdatensätze in Tab2 löscht.
Tab2 besitzt einen Trigger, der, wenn in Tab2 ein Datensatz gelöscht wird, alle Childdatensätze in Tab3 löscht.
Warum verwendest Du nicht ON DELETE CASCADE
?
<zitat src="Online-Handbuch MS SQL-Server 2005">
DML-Trigger sind aus folgenden Gründen nützlich:
Sie können Änderungen über verknüpfte Tabellen in der Datenbank
kaskadierend weitergeben. Diese Änderungen können jedoch mithilfe
von kaskadierenden Einschränkungen der referenziellen Integrität
effizienter ausgeführt werden.
[...]
</zitat>
Geht das generell nicht
Verschachtelte Trigger gehen prinzipiell schon, meines Wissens auch in MS SQL-Server 2000. Gesteuert wird dies über die Konfigurationsoption "nested triggers". Leider hab' ich im Moment keinen Zugriff auf die 2000er-Doku.
oder gibts da einen Trick? Oder wie oder was?
s.o.
Freundliche Grüße
Vinzenz
Hi!
Warum verwendest Du nicht
ON DELETE CASCADE
?<zitat src="Online-Handbuch MS SQL-Server 2005">
DML-Trigger sind aus folgenden Gründen nützlich:Sie können Änderungen über verknüpfte Tabellen in der Datenbank
kaskadierend weitergeben. Diese Änderungen können jedoch mithilfe
von kaskadierenden Einschränkungen der referenziellen Integrität
effizienter ausgeführt werden.[...]
</zitat>Geht das generell nicht
Verschachtelte Trigger gehen prinzipiell schon, meines Wissens auch in MS SQL-Server 2000. Gesteuert wird dies über die Konfigurationsoption "nested triggers". Leider hab' ich im Moment keinen Zugriff auf die 2000er-Doku.
Besten Dank Vinzenz :o)! Werd mich mal mit DML-Triggern und den Nested Triggern auseinandersetzen ;).
Gruß, Jan