DevTrain

Autor: Andreas Rauch

SQL Trigger eine besondere procedure

In SQL gibt es hervorragende Features, den Entwicklern Arbeit abzunehmen. Eines davon ist der Trigger. Dessen Aufgabe besteht hauptsächlich darin, bei bestimmten Ereignissen bestimmte Aufgaben automatisch auszuführen. Solche Ereignisse können Update, delete oder Insert Anweisungen sein.

Was genau macht denn nun der Trigger? Und welche Arbeit kann er abnehmen? Er entspricht eigentlich einer stored procedure. Nur daß dieser Trigger auf oben genannte Ereignisse reagiert.

Wie machen wir nun diesen Trigger?


Ein Trigger wird auf die gleiche Art wie eine Tabelle oder View gebildet:

CREATE TRIGGER trigger_name
ON { table | view }
{
    { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
        [WITH APPEND]
        [NOT FOR REPLICATION]
        AS
        [ { IF UPDATE ( column )
            [ { AND | OR } UPDATE ( column ) ]
                [ ...n ]
        | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
                { comparison_operator } column_bitmask [ ...n ]
        } ]
        sql_statement [ ...n ]
    }
}

 

Wie Sie sehen, haben Sie die Möglichkeit den Einsatzzeitpunktes  des Triggers zu steuern

For ist der Standard Fall. Der Trigger reagiert sofort auf das einleitende Ereignis.


After gibt an, daß der Trigger erst nach der Operation gestartet wird.

Instead of gibt an, daß anstatt der Update oder Insert Anweisung, die den Trigger auslöst, nur der Trigger gestartet wird.     

Wo viel Licht, da auch Schatten. Seien Sie vorsichtig beim Einsatz eines Triggers. Ein kleiner Fehler bei einem Update kann ihr gesamte Tabelle vernichten. Außerdem ist eine Trigger immer nur auf eine Tabelle beschränkt.

Dagegen können Sie den Trigger gleichzeitig auf update, insert oder delete reagieren lassen. Für solch komplexere Trigger arbeitet man am besten  mit Bedingungen.


Machen wir mal ein kleines Beispiel: Wir haben eine Kundentabelle (Kunden) und eine Tabelle Emailverteiler. Wir versenden wöchentlich Betriebliche Kennzahlen und wollen, daß diese nur bestimmte Personen (VIP) bekommen. Sobald in einer Erfassungsmaske bei einer Person der Status VIP eingetragen wird, löst der Trigger ein Ereignis aus, das auf dem Emailverteiler in die Spalte Mail eine '1' setzt.

USE Adressdb
go
Create Trigger email_insert
 on Kunden
 for insert
as
 update  e SET mail = '1'
 from emailverteiler e Inner join Kunden k
 on e.Email_ID = K.Email_ID and k.vip = '1'


Die Möglichkeiten der Trigger sind sehr groß:  Rekursive (Indirekte oder direkte Rekursion) sowie Verschachtelte Trigger sind möglich.


Erfasst am: 05.02.2001 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=291
© Copyright 2003 ppedv AG - http://www.ppedv.de