Jump to content

After Insert Trigger


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Community,

 

heute möchte ich zum ersten Mal einen Trigger verwenden.

Dieser soll nach einem INSERT in eine Tabelle den eingetragenen Datensatz checken

und unter bestimmten Umständen eine Textdatei erzeugen.

Folgendes habe ich gemacht:

DECLARE @Variable VARCHAR(7)

SELECT @Variable = Zelle FROM inserted
WHERE Bedingung

IF LEN(@Variable) > 0
BEGIN
    EXEC master.dbo.xp_cmdshell Befehl_zum_Erzeugen_einer_Textdatei
END

Dies funktioniert soweit. Was ich aber nicht verstehe, beim eingefügten Datensatz sind einige Zellen mit NULL,

obwohl dort Inhalt sein sollte. Kommentiere ich meinen Trigger aus, werden die Zellen wieder gefüllt.

 

Hat jemand eine Idee?

Link zu diesem Kommentar

Moin,

 

ist das ein "Instead of" oder "After" Trigger?

 

Biite immer bedenken, das beim Einfügen kein, ein oder mehrere Datensätze möglich sind. Das muss der Trigger

verarbeiten können. Unbedingt den Trigger auf diese Fälle prüfen.

> SELECT @Variable = Zelle FROM inserted

Was passiert mit @Variable, wenn du mehr als einen Datensatz verarbeitest?

 

Schöner ware etwas wie:

IF EXISTS ( SELECT * FROM inserted Where ....)
BEGIN
 ... Tut hier was
END

Du kannst zum prüfen auch inserted mit anderen Tabellen JOINen, um dann weitere Aktionen durchzuführen.

 

> beim eingefügten Datensatz sind einige Zellen mit NULL

 

Hast Du evtl. noch andere Befehle im Trigger die die Tabelle inserted manipulieren ?

Ob der xp_cmdshell hier evtl. noch andere Nebenwirkungen bei bestimmten Bedingungen hat, weiß ich leider nicht.

 

Gruß Kai

Link zu diesem Kommentar

Hallo Kai,

 

das ist ein AFTER Trigger. Dieser soll nach jedem INSERT in die Tabelle den eingefügten Datensatz checken und handeln.

 

Was heißt "beim Einfügen kein, ein oder mehrere Datensätze" ?

Vor Allem, was heißt kein ?

 

Hast Du evtl. noch andere Befehle im Trigger die die Tabelle inserted manipulieren ?

 

Ich "manipuliere" die Tabelle inserted eigentlich nicht. Ich lese sie aus und schreibe einen Wert in @Variable.

Der Inhalt der Variable wird dann beim Generieren einer Datei mit xp_cmdshell zum Dateinamen.

Link zu diesem Kommentar
  • 1 Monat später...

Moin,

 

wenn du eine Variable in einem SELECT zuweist (> SELECT @Variable = Zelle FROM inserted) war die Frage was passiert, wenn im Statement mehrere Zeilen als Ergebnis vorkommen.

Die Variable speichert ja nur einen Wert, die Anzahl der Datensätze in inserted ist aber größer 1.

 

Genauso kann es passieren, dass dein Insert-Statement kein Datensatz einfügt, weil die Bedingung nicht erfüllt ist. Der Trigger wird dann aber trotzdem ausgelöst:

INSERT INTO Tabelle (...)
SELECT ...
FROM NochneTabelle
WHERE 1=2

Trigger wird gestartet, dein o.g. "SELECT @Variable = Zelle FROM inserted" ergibt dann @Variable = NULL Bei SQL immer mengenbasiert denken, nicht zeilenweile (ok, da gibt es auch Möglichkeiten), daher der Einwand was passiert beim Einfügen von keinem , einem oder mehreren Datensätzen.

 

Gruß Kai

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...