JCB: Trigger soll anderen Trigger triggern

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

  1. 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

    --
    -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
    -- Navigate all your PHP web projects with  PHP Project Browser--
  2. 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

    1. 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