none
Log-Trigger für Bulk-Insert RRS feed

  • Frage

  • Hallo,
    ist es möglich einen Trigger zu erstellen, welcher in einer Log-Tabelle aufzeichnet,
    welche Datensätze erfolgreich inserted wurden - und welche nicht. Auf den Felder sitzen Constaints, welche z.B. bei Fehlerhaften Werten greifen. Daher sollten die Datensätze welche die REgeln erfüllen inserted werden, und diejenigen DAtensätze welche gegen die Constraints verstoßen u. daher nicht inserted werden in eine Log-Datei geschrieben werden.
    Bsp.:

    Insert into Tabelle (Col1, Col2)
    Select Col1,Col2 FROM Tabelle2

    Merci u.
    LG Nicole
    Mittwoch, 13. Juli 2011 18:17

Alle Antworten

  • Hallo Nicole,

    zunächst einmal sind BULK Operationen auf hohe Performanz ausgelegt und deswegen wird im Standard dabei kein vorhandener Trigger gefeuert, es sei denn man setzt explizit die Option FIRE_TRIGGERS; im Standard ist es abgeschaltet.

    Ein After Trigger wird nur nach erfolgreichem Insert gefeuert; gibt es einen Verstoß gegen ein Constraint, wird das Insert nicht ausgeführt und somit feuert auch kein Trigger. Du könntest ein INSTEAD OF Trigger verwenden und Dich selbst ums Insert kümmern; Fehler fängst Du im TRY / CATCH Block ab und fügst fehlerhafte Datensätze in eine Log-Tabelle ab; Zugriff auf Dateien geht, würde ich aber von absehen.

    Noch besser würde es mit einem SSIS Packet geben, fehlerhafte Daten, sei es nach Prüfung oder fehlerhaftes Insert, kannst Du in eine Datei oder Tabelle umleiten, dafür gibt es Build-In Funktionen "Fehlerausgabe" in SSIS. 


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    • Als Antwort vorgeschlagen Elmar Boye Mittwoch, 13. Juli 2011 20:43
    Mittwoch, 13. Juli 2011 18:34