PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DELETE funktioniert nicht



ExeCRabLE
26-06-2003, 11:54
Hallo zusammen,

ich habe mir eine Tabelle aufgebaut :

MSCLOG2 (ID INT PRIMARY KEY, SPOOLNR INT , TID INT, TEXT char(255), TSYSID INT)

Nun möchte ich alle! Einträge mit einer gewissen Spoolnummer löschen, doch da der Schlüssel auf der ID liegt, kann ich mir dem Befehl... :

DELETE FROM MSCLOG2 where MSCLOG2.SPOOLNR=$spoolnr

...die Einträge nicht löschen. Die ID ist fortlaufend...

Ich verzweifel langsam *heul*

Könnt ihr mir dabei weiterhelfen ?

cu
ExeCRabLE

Jasper
26-06-2003, 15:27
Original geschrieben von ExeCRabLE

MSCLOG2 (ID INT PRIMARY KEY, SPOOLNR INT , TID INT, TEXT char(255), TSYSID INT)

Nun möchte ich alle! Einträge mit einer gewissen Spoolnummer löschen, doch da der Schlüssel auf der ID liegt, kann ich mir dem Befehl... :

DELETE FROM MSCLOG2 where MSCLOG2.SPOOLNR=$spoolnr

...die Einträge nicht löschen. Die ID ist fortlaufend...


warum sollte

DELETE FROM MSCLOG2 where MSCLOG2.SPOOLNR=$spoolnr

nicht funktionieren? delete hat nichts mit primary keys zu tun. wenn SPOOLNR eindeutig ist, wirf ID weg und verwende SPOOLNR als primärschlüssel. wenn du ID allerdings gehalten willst, setz einen index auf SPOOLNR

-j

Christoph
26-06-2003, 16:16
Der einzige Grund warum das DELETE nicht klappen könnte wären Verletzungen
von Constraints. Vermutlich hast Du MSCLOG2.ID in eienr anderen Tabelle als FOREIGN KEY
referenziert und noch Sätze die sich auf die zu löschenden Daten beziehen.

In diesem Fall *dürfen* die Sätze nicht gelöscht werden,w eil das zu Inkonsistenzen
in der DB führen würde; da sorgt dan dder FOREIGN KEY Constraint für.
Wenn Du alle refrenzierenden Sätze gleich mitlöschen willst, verwende DELETE CASCADE
(aber bitte mit Vorsicht: erst mal in Transaktion mit ROLLBACK ausprobieren!).

ExeCRabLE
27-06-2003, 10:44
Hallo,

ich kann wohl die Tabellenstruktur nicht abändern, weil die Spoolnr nicht eindeutig sein darf. Es gibt zu jeder Spoolnr mehrere Einträge in der Tabelle. Sobald die Spoolnr einen PKey hat, kann ich doch keinen weiteren Eintrag mit der selben Nummer anlegen.

Zu jedem Spool soll eine art log in der Tabelle abgelegt werden. Je Spool werden ca. 10 verschiedene loggings abgelegt.

| 1 | 5428 | 1 | Ausgabe per STDIN erfolgreich! | 1
| 2 | 5499 | 1 | Ausgabe per Umleitung erfolgreich! | 1
| 3 | 5428 | 1 | Verarbeitung per iq/45 | 1
| 4 | 5499 | 4 | Verarbeitung nicht möglich | 1
| 5 | 5499 | 8 | Verarbeitung abgebrochen | 1
| 6 | 5428 | 1 | Ausgabe per STDIN beendet! | 1
| 7 | 5428 | 1 | Druck wurde beendet | 1

Hier sind z.B. 2 Spooleinträge und wenn ich nun mit dem Delete-Befehl "alle" Spooleinträge mit "5499" löschen möchte, verweigert mir der jetzige Befehl die Ausführung...Ich verstehe momentan nicht warum. Einen einzigen Eintrag funktioniert wie gewohnt ... :(

cu
ExeCRabLE

PS: Einen "FOREIGN KEY" habe ich bis jetzt noch nicht verwendet ...

ExeCRabLE
30-06-2003, 07:37
Moin,

ich habe feststellen müssen, das der Delete-Befehl sehrwohl funktioniert... *grummel* Der SQl-CLient gibt mir nur eine Fehlermeldung wieder, die kein Mensch nachvollziehen kann.

Thanx @ll

cu
ExeCRabLE