trashman2001 0 Geschrieben 18. Dezember 2015 Melden Teilen Geschrieben 18. Dezember 2015 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? Zitieren Link zu diesem Kommentar
hh2000 10 Geschrieben 19. Dezember 2015 Melden Teilen Geschrieben 19. Dezember 2015 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 Zitieren Link zu diesem Kommentar
trashman2001 0 Geschrieben 21. Dezember 2015 Autor Melden Teilen Geschrieben 21. Dezember 2015 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. Zitieren Link zu diesem Kommentar
hh2000 10 Geschrieben 23. Januar 2016 Melden Teilen Geschrieben 23. Januar 2016 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 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.