Announcement

Collapse
No announcement yet.

Trigger

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Trigger

    Hi,

    sitz hier grad vor einem Problem, welches folgendermaßen aussieht.

    Ich habe 2 Trigger, die auf der gleichen Tabelle sitzen. Es ist einmal ein After Insert und einmal ein After Update Trigger.

    Wird ein Insert durchgeführt, so soll der After Insert Trigger eine Spalte / Flag updaten, um den neuen Datensatz als aktuellen zu markieren.

    Der After Update Trigger soll Updates auf die Tabelle verhindern.


    Ihr seht, dass beide Trigger sich jetzt in die Quere kommen. Meine Frage ist deshalb, wie ich im Update Trigger die Aktionen des Insert Trigger erlauben kann? Gibt es so etwas oder evtl. eine ganz andere Möglichkeit bzw. Lösungsansatz, den ich jetzt nur leider gerade nicht sehe?

    Danke schon einmal für eure Antworten.
    Gruss

  • #2
    Hallo duukta,

    was Du da hast, ist ein "geschachtelter Trigger", unter dem Stichwort findest Du in der BOL zum SQL einiges.

    Man kann "geschachtelte Trigger" auf Server-Ebene deaktivieren, nur weiß man dann nicht, welche noch alle davon betroffen sind.

    Die 2. Möglichkeit ist, den AFTER INSERT Trigger durch einen INSTEAD OF INSERT Trigger zu ersetzten, der die Daten mit der geänderten Spalte in die Tabelle schreibt, dann wir erst kein UPDATE ausgelöst.
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hi,
      Danke für deine Antwort.
      werd gleich mal nach dem Stichwort suchen und schauen, was ich dazu finde.

      zu deinem zweiten Vorschlag: Wenn ich den After Insert Trigger in einen Instead Of Trigger abändere und in diesem ein Insert durchführe, so ruft sich der Trigger immer wieder neu auf. Werde jetzt also einmal ein wenig auf die Suche gehen und schauen, was es mit dem De-/Aktivieren von geschachtelten Triggern auf sich hat.
      Gruss

      Comment


      • #4
        so ruft sich der Trigger immer wieder neu auf
        Das wäre dann ein "rekursiver Trigger", was nur möglich ist, wenn die Datenbank-Option explizit aktiviert wurde; im Standard ist sie eigentlich deaktiviert.
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Hi,

          hatte mich glaub ich falsch ausgedrückt, ich hatte es noch nicht ausprobiert, hab nur mal drüber nachgedacht und das in Worte gefasst ;-)

          Hab nachgeschaut, standardmäßig ist es deaktiviert. Hab auch einen Instead of Trigger verwendet und es funktioniert. Komplett ist mein Problem aber noch nicht gelöst, da ich nen alten Datensatz updaten muss, in dem das Flag gesetzt ist. Werd mal schauen, ob es sinnvoll ist, den alten Datensatz auszulesen, zu löschen und neu einzufügen.

          Gruss

          Comment

          Working...
          X