Announcement

Collapse
No announcement yet.

DML-Trigger

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DML-Trigger

    Hallo zusammen,

    ich habe für eine SQL-Datenbank ein Audit-Trial mit DML-Trigger erstellt.
    Sobald ein Insert- oder Update-Anweisung erfolgt, werden Daten in die entsprechende Tabelle gespeichert.
    Nun möchte ich noch zu dem jeweiligen Audit-Datensatz die Anweisung des Triggers mit hinterlegen (Insert, Update oder Delete).


    Folgenden Befehl habe ich erstellt.
    Dieser funktioniert soweit bis auf den fehlenden Eintrag ob ein Insert- bzw. Update-Vorgang vor lag. Dafür benötige ich Eure Hilfe.

    create trigger HerkunftAuditLog
    on dbo.Herkunft
    after insert, update
    as
    begin
    set nocount on
    insert into dbo.Herkunft_Audit(ID_Herkunft, Herkunft, sysdate, sysname, Inserttime, datenbank, rechner)
    select Id_herkunft, Herkunft, SYSDATETIME() as sysdate, SUSER_SNAME() as sysname,
    CURRENT_TIMESTAMP as inserttime, DB_NAME () as datenbank, HOST_NAME() as Rechner
    from inserted;

    end
    go

    VG

    bruno2610

  • #2
    https://stackoverflow.com/questions/...sert-or-update

    Läuft daraus hinaus das du nicht nur auf die inserted Pseudotabelle schauen mußt sondern auch auf deleted.

    Datensatz nur in inserted -> INSERT
    Datensatz nur in deleted -> DELETE
    Datensatz in beiden Pseudotabellen -> UPDATE

    Dein jetziges Vogehen könnte da aber in prinzipielles Problem haben (habe ich nicht genau durchdacht). Wenn du ein Update machst das mehrere Zeilen ändert feuert dein Trigger nur einmal und alle Änderungen stehen in inserted bzw. deleted. Welcher Datensatz in den jeweiligen Tabellen zusammenhängt ist möglicherweise schwer herauszufinden. Übrigens wenn du ein update schreibst das nichts ändert feuert dein Trigger (halt wegen entsprechender Filterung) trotzdem und beide Pseudotabellen sind leer. Die Trigger hängen an der Aktion die du ausführst nicht ob auch tatsächlich was geändert wird und auch nicht wieviel geändert wird.


    Edit: Die Antwort bezieht sich auf SQL Server verhalten. Auch wenn wir hier im allgemeinen Forum sind. Die Anweisung sieht nach SQL Server aus.

    Comment


    • #3
      Ich habe 4 Datensätze geändert wobei 2 die gleiche Id hatten. Zusätzlich habe ich nur 1 neuen Datensatz hinzugefügt, funktioniert auch. Also Daten werden nur in die Audit-Tabelle geschrieben, wenn wirklich eine Neuerfassung bzw. Änderung vorliegt und alle Änderungen sind in der Audit-Tabelle einzeln aufgeführt. Den Trigger für die Delete-Anweisung muss ich noch erstellen.

      Comment

      Working...
      X