MS SQL-Trigger: DELETE wird wie UPDATE behandelt?!?!
Hallo,
ich habe eine Herstellerdatenbank. Diese habe ich Customized, ist auch so vom Hersteller erwünscht.
Problem ist, das ich eine ChangeLogTable habe (als internes Audit), in welcher Tabellenname, Zeilenname, ZeilenID, User und Datum zusammenfließen.
Auf einer Urspurngstabelle möchte ich nun Triggern. Dazu habe ich 3 Trigger vorgesehen, je einen eigenen für INSERT, UPDATE und DELETE.
Insert und Update klappen; aber der DELETE nicht. Wenn Benutzer einen Eintrag löscht erscheint der in meiner ChangeLogTable als UPDATE, nicht als Delete.
Im SQL-Command habe ich klar gesetzt:
und beziehe mich auf die Datenbank
Hat da jemand eine Idee, warum beim löschen das DELETE anscheinend als UPDATE abläuft?!
Danke für Idden!
ich habe eine Herstellerdatenbank. Diese habe ich Customized, ist auch so vom Hersteller erwünscht.
Problem ist, das ich eine ChangeLogTable habe (als internes Audit), in welcher Tabellenname, Zeilenname, ZeilenID, User und Datum zusammenfließen.
Auf einer Urspurngstabelle möchte ich nun Triggern. Dazu habe ich 3 Trigger vorgesehen, je einen eigenen für INSERT, UPDATE und DELETE.
Insert und Update klappen; aber der DELETE nicht. Wenn Benutzer einen Eintrag löscht erscheint der in meiner ChangeLogTable als UPDATE, nicht als Delete.
Im SQL-Command habe ich klar gesetzt:
AFTER DELETE
und beziehe mich auf die Datenbank
FROM DELETED
Hat da jemand eine Idee, warum beim löschen das DELETE anscheinend als UPDATE abläuft?!
Danke für Idden!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 602283
Url: https://administrator.de/contentid/602283
Ausgedruckt am: 25.11.2024 um 04:11 Uhr
4 Kommentare
Neuester Kommentar
ich meine du mußt den Trigger auf "before delete" definieren, aber im allgemeinen sind die Delete Trigger nur dafür da, ein Delete zu erlauben oder nicht. Es kann durchaus sein, daß der Server das in etwa so behandelt:
- update tabelle set value1=NULL, value2=NULL.... valuen=NULL where rowguid="aösdkaöskjdfskdöjfjashfalksjfslkjsad"
- update tabelle set value1=NULL, value2=NULL.... valuen=NULL where rowguid="aösdkaöskjdfskdöjfjashfalksjfslkjsad"
Hallo,
ich bilde mir ein, das mal andersherum gelernt zu haben: Es gibt im MSSQL (seinerzeit, in meiner Erinnerung) kein "echtes" Update, sondern es gibt nur ein "DELETE (old) und dann INSERT (new)", und das wurde gerade bei Triggern sichtbar, bei Update feuerten dann alle. Passt zugegeben nicht auf deine Fehlerbeschreibung.
Grüße
Filipp
ich bilde mir ein, das mal andersherum gelernt zu haben: Es gibt im MSSQL (seinerzeit, in meiner Erinnerung) kein "echtes" Update, sondern es gibt nur ein "DELETE (old) und dann INSERT (new)", und das wurde gerade bei Triggern sichtbar, bei Update feuerten dann alle. Passt zugegeben nicht auf deine Fehlerbeschreibung.
Grüße
Filipp
Hallo Dude,
ich empfehle Dir, mal den Profiler einzusetzen und nachzuschauen, was genau passiert.
Es könnte sein, daß in der Datenbank nicht wirklich ein Datensatz gelöscht wird, wenn der Benutzer etwas löscht. Es könnte z.B. nur ein Flag gesetzt werden, daß der Datensatz jetzt als gelöscht gilt oder es könnte nur ein Wert in einer Tabelle gelöscht worden sein, der auf einen anderen Datensatz verwiesen hat.
Und selbst wenn wirklich gelöscht wurde und bei Dir ein Gedankenfehler beim Trigger vorliegt, findest Du es wahrscheinlich heraus, wenn Du den Ablauf verfolgst.
Gruß, Mad Max
ich empfehle Dir, mal den Profiler einzusetzen und nachzuschauen, was genau passiert.
Es könnte sein, daß in der Datenbank nicht wirklich ein Datensatz gelöscht wird, wenn der Benutzer etwas löscht. Es könnte z.B. nur ein Flag gesetzt werden, daß der Datensatz jetzt als gelöscht gilt oder es könnte nur ein Wert in einer Tabelle gelöscht worden sein, der auf einen anderen Datensatz verwiesen hat.
Und selbst wenn wirklich gelöscht wurde und bei Dir ein Gedankenfehler beim Trigger vorliegt, findest Du es wahrscheinlich heraus, wenn Du den Ablauf verfolgst.
Gruß, Mad Max