Delete-Trigger reagiert nicht wie erwartet SQL Express 2016

Hallo zusammen,

im Einsatz ist ein SQL Express 2016.

Es gibt eine Tabelle nnsImportOGSTMP in die Werte durch einen Excel-Import geschrieben werden. Die Tabelle hat 2 Primärschlüssel. Das TMP steht für temporär.
In dieser Tabelle gibt es einen Delete-Trigger der folgendes macht:


Sinngemäß sollen also die Daten in der "temporären Tabelle" nnsImportOGSTMP gelöscht werden.
Dabei soll in der "produktiven" Tabelle nnsImportOGS geprüft werden ob Rechnungsnummer, Rechnungsposition als auch Rechnungsdatum bereits existieren.
Wenn nicht, soll der Inhalt (*) aus der temporären (from Deleted) in die produktive Tabelle eingefügt werden.

Importiere ich jetzt über Excel z.B. 1000 Datensätze in die 'temporäre' Tabelle und lösche diese dann im Managementstudio über
so werden diese 1000 Datensätze auch korrekter Weise in die produktive (leere) Tabelle kopiert und die TMP wird geleert.

Leere ich die produktive Tabelle und wiederhole den Import der 1000 Datensätze und lösche die obersten 300 über
so werden diese 300 Datensätze gelöscht und 300 Datensätze in die produktive Tabelle kopiert.

Übrig bleiben in der TMP 700 Datensätze.

Wiederhole ich jetzt wahlweise mit einem Top(n) oder einem kompletten "delete from", dann werden die Daten in der TMP gelöscht, aber diese Datensätze nicht in die produktive Tabelle kopiert, in der bereits die 300 anderen Datensätze liegen.

Primärschlüsselverletzungen sind ausgeschlossen.



Kann sich da jemand einen Reim drauf machen?

Content-Key: 444230

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

Ausgedruckt am: 21.01.2022 um 09:01 Uhr

Mitglied: ukulele-7
Lösung ukulele-7 25.04.2019 aktualisiert um 09:43:08 Uhr
Goto Top
Also ich würde sagen du scheiterst schon in der IF-Clause, sofern es hier nicht eine MSSQL Funktion gibt die mir nicht geläufig ist.

Du greifst mit deinem Select nur auf die Haupttabelle zu und vergleichst die Spalten mit sich selbst, solange also Datensätze in der Haupttabelle existieren gibt dein Select immer ein "existiert" zurück und damit passiert erstmal gar nichts.

Du müsstest entweder die Temp-Tabelle oder, wie in Triggern eigentlich sinnvoller, die INSERTED / DELETED-Tabellen mit der Haupttabelle joinen und dann auf Dinge wie nnsImportOGS.rechnungsnummer = INSERTED.Rechnungsnummer prüfen.

Ein weiterer Knackpunkt ist dann in jedem Fall das, sobald eine Zeile deine Bedingung erfüllt, sich das auf alle Datensätze der Tabelle oder des Vorganges bezieht. Der Trigger löst nämlich nur einmal pro Insert/Update/Delete aus und nicht einmal pro Datensatz wie man das z.B. in MySQL macht. Da ist es wenig sinnvoll mit einem IF EXISTS für alle Datensätze zu arbeiten sondern du müsstest das ganze in der Select-Anweisung für den INSERT berücksichtigen (sprich dort den Join einbauen).
Natürlich nicht mit INSERT INTO nnsImportOGS SELECT * sondern mit expliziten Spaltennamen arbeiten, sowohl im Select als auch im Insert, ich hoffe das ist klar.
Mitglied: Aximand
Aximand 25.04.2019 um 13:31:18 Uhr
Goto Top
Danke,

hat mich auf den richtigen Weg gebracht, nun läuft es ;)
Heiß diskutierte Beiträge
question
Windows XP: IE 8 zeigt keine Seiten mehr an :-) gelöst altmetallerVor 1 TagFrageWindows XP21 Kommentare

Huhu, ich habe hier tatsächlich noch einen Dell Dimension 9100 (Pentium IV, 3Ghz) stehen, den ich mit einer NVIDIA Quadro FX 540 und 4GB RAM ...

question
Datensicherung nach Geschäftsaufgabefboy33Vor 1 TagFrageBackup8 Kommentare

Guten Tag liebe (ex) Kollegen, nun nach 50 Jahren EDV, habe ich meine Firma abgemeldet und bin in den Ruhestand gegangen. Mein Problem, was mache ...

question
Ethernet über Telefonleitung gelöst Net-ZwerKVor 1 TagFrageLAN, WAN, Wireless8 Kommentare

Moin! Ich suche einen Konverter, mit dem ich auf eine Telefonleitung (2 Draht) ein Netzwerksignal legen kann. Geht darum, dass ich beim einem Kunden einen ...

question
PLEX bricht im HEIMNETZ nach 1 Minute Film abStrahlemann-69Vor 1 TagFrageUbuntu9 Kommentare

Hallo an alle, ich hab mir den Plexserver auf Proxmox installiert und mein NAS eingebunden. Er ließt auch alles ein und funktioniert. Nun laß ich, ...

question
O365 Outlook + Teams sperren gelöst sraL91Vor 19 StundenFrageMicrosoft Office16 Kommentare

Hallo Zusammen, wir haben in unserer Firma Office 365 ausgerollt und ich stehe nun vor folgendem Problem. Unsere Firma sind in 50 Standorte unterteilt und ...

question
MFA mit Microsoft?cseVor 16 StundenFrageWindows Userverwaltung5 Kommentare

Hi Leute, ich hoffe ihr könnt mir ein wenig helfen. Von unserer Gruppe (central IT im Ausland) verlange ich (im Zuge TISAX Audit) auf unseren ...

question
Image auf zweiten Laptop kopierenmario28Vor 1 TagFrageWindows Installation5 Kommentare

Hallo zusammen, ich habe mir für daheim zwei Mal den gleichen Laptop bestellt (Schenker Via 15 Pro M20) und nach Erhalten mit dem ersten begonnen, ...

question
PC - Komplettsicherunggreenhorn1Vor 20 StundenFrageBackup10 Kommentare

Hallo, welche Möglichkeit gibt es an Sicherungen, wo man das gesamte System Win10 sichern kann? Sodass ich mit einer Sicherung einen neuen PC 1 zu ...