docusnap-dude
Goto Top

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:

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!

Content-ID: 602283

Url: https://administrator.de/contentid/602283

Ausgedruckt am: 25.11.2024 um 04:11 Uhr

GrueneSosseMitSpeck
GrueneSosseMitSpeck 05.09.2020 um 12:36:11 Uhr
Goto Top
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"
filippg
filippg 07.09.2020 um 00:45:21 Uhr
Goto Top
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. face-sad

Grüße

Filipp
MadMax
Lösung MadMax 07.09.2020 um 15:45:23 Uhr
Goto Top
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
DocuSnap-Dude
DocuSnap-Dude 14.09.2020 aktualisiert um 09:17:17 Uhr
Goto Top
Zitat von @MadMax:

ich empfehle Dir, mal den Profiler einzusetzen und nachzuschauen, was genau passiert.

Huchg, den kannte ich tatsächlich gar nicht. Sehr geil!

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.


Bingo! Du hast recht, das ist ein FLAG und wird in einr SP nach Zeitraum x dann gecleant etc.

Danke Dir!