Fortlaufende Nummerierung für einen Primärschlüssel

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Marco Schade
**
Beiträge: 42
Registriert: Mi, 08.03.2017 20:46

Fortlaufende Nummerierung für einen Primärschlüssel

Beitrag von Marco Schade »

Hallo Forum ,

wie schaffe ich es in einer bestehenden Datenbank den Primärschlüssel neu zu nummerieren ?
die Neu zu nummerierende Tabelle steht in einer Beziehung zu einer anderen.
ZB Tabelle "Kunde" besteht aus ID, Vorname,Nachname,usw. Tabelle 2 "Rechnung" besteht aus ID, KundID, Rechnungsdatum ,usw.
wie schaffe ich es die ID vom Tabelle Kunde neu zu nummerieren ?

dazu habe ich einen Artikel gefunden
Die Tabelle enthält bereits Daten
Führe den folgenden SQL-Befehl für das Primärschlüsselfeld "ID" über das Menü Extras > SQL aus. und lasse Dir dabei die Ausgabe der SELECT-Anweisung anzeigen:
UPDATE "Kunde" AS "a" SET "ID" = (SELECT COUNT("ID") FROM "Kunde" WHERE "ID" < "a"."ID")
Für einen Primärschlüssel, der über AutoWert weiter automatisch erstellt wird, sind zusätzliche Schritte sinnvoll. Lasse Dir im Menü Extras > SQL dabei die Ausgabe der SELECT-Anweisung anzeigen:
SELECT MAX("ID")+1 FROM "Kunde"
Füge anschließend die maximale ID in den Befehl
ALTER TABLE "Tabelle" ALTER COLUMN "ID" RESTART WITH KD1
ein und führe diesen Befehl aus.
Es wird lediglich eine fortlaufende Nummerierung benötigt
Unabhängig vom Primärschlüssel kann eine fortlaufende Nummerierung erstellt werden. Dies geschieht über eine Abfrage. Erstelle die folgende Abfrage über Abfrage in der SQL-Ansichet erstellen ...:
SELECT "a".*, (SELECT COUNT("ID") FROM "Tabelle" WHERE "ID" <= "a"."ID") AS "lfdNr." FROM "Tabelle" AS "a"
Die Abfrage ist editierbar und hat eine fortlaufende Nummerierung, die sich nach dem Primärschlüsselfeld "ID" richtet.
nur leider kommt da eine Fehlermeldung

UPDATE "Kunde" AS "a" SET "ID" = (SELECT COUNT("ID") FROM "Kunde" WHERE "ID" < "a"."ID")

Fehlermeldung : 1: Integrity constraint violation SYS_FK_2691 table: Kommunikation

hat jemand eine Idee und kann mir helfen?


Liebe Grüße
Marco
Marco Schade
**
Beiträge: 42
Registriert: Mi, 08.03.2017 20:46

Re: Fortlaufende Nummerierung für einen Primärschlüssel

Beitrag von Marco Schade »

Hallo Forum;

der Grund für die Maßnahme ist, die ID vom Tabellenblatt Kunde ist nicht Lückenlos,
IdKunde sollte gleich die Kundennummer sein,

jetzt dachte ich, man kann es einfach neu nummerieren und fertig ist man .

falsch gedacht

Kann man denn ein Abfrageergebnis wieder in der Tabelle Speichern???
die Lückenlose Abfrage habe ich hinbekommen

Code: Alles auswählen

SELECT "ID", ( SELECT COUNT( "ID" ) FROM "Kunde" WHERE "ID" <= "a"."ID" ) "Kd.Nr." FROM "Kunde" AS "a"
kann man denn das Ergebnis "Kd.Nr." in der der Tabelle Kunde in Spalte KD.NR speichern ???


Liebe Grüße

Marco
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Fortlaufende Nummerierung für einen Primärschlüssel

Beitrag von F3K Total »

Moin,
dein Problem ist mit großer Wahrscheinlichkeit, dass du die ID in die Tabelle Rechnung zwar verknüpft hast, aber nicht "kaskadierend aktualisieren" eingestellt hast.
So wird die ID in der Tabelle Rechnung nicht mitgezogen und es kommt zu besagter Fehlermeldung.
Gruß R
Marco Schade
**
Beiträge: 42
Registriert: Mi, 08.03.2017 20:46

Re: Fortlaufende Nummerierung für einen Primärschlüssel

Beitrag von Marco Schade »

Hallo R,

Was ist denn kaskadierend akktualisieren?
Wo stelle ich das denn ein?

Liebe Grüße
Marco
Marco Schade
**
Beiträge: 42
Registriert: Mi, 08.03.2017 20:46

Re: Fortlaufende Nummerierung für einen Primärschlüssel

Beitrag von Marco Schade »

Hallo R,
ich habs gefunden und deine Vermutung hat gestimmt .
Es geht .

Vielen Dank nochmal.

Liebe Grüße Marco
Antworten