Hallo Micha,
ist eigentlich gar nicht so kompliziert und knifflig.
Ein Trigger reagiert auf bestimmte Aktionen auf einem Objekt. Dieses Objekt kann eine Tabelle, eine Datenbank oder sogar eine SQL-Server-Instanz sein.
Wenn die im Trigger zu überwachende Aktion (das Event) durch einen Befehl ausgelöst wird (in deinem Fall das Erstellen einer neuen Datenbank, das ein Event "CREATE_DATABASE" auslöst)
können innerhalb der Trigger-Programmierung zusätzliche Befehle abgesetzt werden.
Bei Abfangen eines Events auf SQL-Server-Instanz-Ebene spricht man von einem DDL-Trigger (bei Tabellen z.B. wird dies DML-Trigger genannt).
Ich nehme mal das Beispiel der MSDN-Seite auseinander:
Schritt 1:
Code:
IF EXISTS (SELECT * FROM sys.server_triggers
WHERE name = 'ddl_trig_database')
DROP TRIGGER ddl_trig_database
ON ALL SERVER;
GO
Hier wird lediglich geprüft, ob der Trigger bereits angelegt wurde. Ist das der Fall, so wird er aus der SQL-Serverinstanz gelöscht.
Schritt 2:
hier wird der Trigger angelegt. mit der Klausel
wird angegeben, dass es sich um einen Trigger für die gesamte Instanz handelt.
Das Schlüsselwort "FOR" gibt an, dass die im Trigger-Code angegebenen Anweisungen ausgeführt werden, bevor die Datenbank angelegt wird!
Für deine Anweisungen müsste hier also das Schlüsselwort "AFTER" stehen.
Das im Beispiel angegebene SELECT ist die Anweisung, die mittels dem Trigger ausgeführt werden soll.
Im Beispiel wird die Funktion EVENTDATA() verwendet, die ein XML-Fragment zurückgibt.
Über die Anweisung .value wird Text des angegebenen XML-Knotens ausgegeben.
Diese Anweisung musst du mit deinen Befehlen überschreiben. Das SELECT benötigst du nicht.
Schritt 3:
Mit der Anweisung
Code:
DROP TRIGGER ddl_trig_database
ON ALL SERVER;
GO
wird der grade erst angelegte Trigger auch direkt wieder gelöscht. Diesen Code-Abschnitt brauchst du gar nicht.
Viele Grüße,
Tommi