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-Key: 602283

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

Printed on: April 13, 2024 at 13:04 o'clock

Member: GrueneSosseMitSpeck
GrueneSosseMitSpeck Sep 05, 2020 at 10:36:11 (UTC)
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"
Member: filippg
filippg Sep 06, 2020 at 22:45:21 (UTC)
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
Member: MadMax
Solution MadMax Sep 07, 2020 at 13:45:23 (UTC)
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
Member: DocuSnap-Dude
DocuSnap-Dude Sep 14, 2020 updated at 07:17:17 (UTC)
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!