-
Lfnr innerhalb des 'eigendlichen' Key vergeben
Moin,
hier steht ja beschrieben, wie das mit der Lfd nr geht
Ich bräuchte nun eine LfNr innerhalb des 'Restlichen Keys'
Key:
F1, F2, F3 + LfNr
a, b, c, 1
a, b, c, 2
...
a, b, c, 189
...
x, y, z, 1
x, y, z, 2
...
mit Key 1, 2 und 3 kann es /Tag 150- 300 Sätze geben.
Datum und Uhrzeit ist recht lang und eigendlich egal.
Nicht Unique geht aus anderen Gründen nicht.
Bisher ist das 'händisch' gelöst.
Aber ne neue Tabelle könnte ja mal 'modern' (was immer das bedeutet) gemacht werden.
Geht das per 'SQL-Automatik?
Danke
Robi
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Einfache Antwort: nö!
Aber du kannst eine Halbautomatik verwenden.
Per Before-Insert-Trigger kannst du dir an Hand des Schlüssels die nächste Nummer ermitteln, falls noch keine vorhanden ist, den Wert 1 setzen.
Allerdings muss man bedenken, dass dies durchaus parallel passiert und es dann zu doppelten Schlüsseln führt.
Du kannst aber auch eine Identity-Column nehmen. Die nummeriert über Alles.
Bei sequentiellen Abfragen nimmst du eine "ROW_NUMBER over(partition by k1,..., kn order by identity)" dazu.
Dies hat auch den Charme, dass die Identity als Primary-Key für Update/Delete-Operationen sowie referential constraints verwendet werden kann.
-
... geht nicht gibts (fast) nicht:
Wenn keiner auf die Tabelle per Rekord Löffel Ekzem los geht, kann man die Tabelle durch eine View ersetzen und dann per instead of Trigger funktionale Logik dazwischen klemmen. Das Problem doppelter Nummern kriegt man (auch in Baldurs Variante) per korrektem Commit Handling (nicht ganz trivial) weg.
@Baldurs Variante: das wird bei referentiellen Beziehungen tricky.
D*B
-
Schade,
ne bewährte 'Hand am Arm' Methode haben wir.
Danke Euch ...
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Sofern es nur um einen eindeutigen Wert geht und der Zähler nicht für jeden Key bei 1 anfangen muss, kann auch mit einem SEQUENCE Objekt gearbeitet werden. Aus dem Sequence Object kann der nächste Zähler ermittelt werden. Mit jeder neuen Anfrage wird der nächste Wert ausgegeben. Bei einem Rollback bleibt die Sequence unverändert, d.h. der Wert wird nicht zurückgesetzt.
Mit dem folgenden Statement kannst Du ein Sequence Object erstellen:
Code:
Create Sequence YourSchema.YourSeq As Integer Start With 1;
Mit dem folgenden Befehl, der in SQL eingebunden werden kann, kannst Du den nächsten Wert ermitteln:
Code:
Next Value For YourSchema.YourSeq;
Code:
Insert into yourTable (yourSeqCol, ....)
Values(Next Value For YourSchema.YourSeq, ....);
Birgitta
-
https://www.ibm.com/docs/en/i/7.2?to...dentity-column
Wie heißt es so schön: Sequence ist obsolet, Identity ist nun state of the art.
Dann passiert alles automatisch, next value of braucht man dann nicht, und auf Identity habe ich ja hingewiesen;-).
Sequence ist nur noch relevant, wenn man eine Nummer über mehrere Tabellen haben möchte.
-
... was die IBM uns gnädig gibt, muss man auch nehmen.
D*B
@Nummer über mehrere Tabellen: da würde ich meinen Nackenhaaren vertrauen (die sträuben sich gerade) und über das Datenbank-Design nachdenken!
-
Nun ja, Identity ist bei anderen DB's schon eher Standard;-).
Ich habe auch schon Fehler gesucht wegen doppelter Sequence weil einer sich beim Insert vertippt hatte.
Da gab es die Regel, Namen zu nummerieren. Tabellen mit Dnnnn, Sequence mit Snnnn. DA kann man schon mal daneben liegen.
-
Die Identity Spalte kannst du mit anderen Spalten über den Primary Key kombinieren.
Dann kann es eben die gleiche Identity Nummer mehrfach geben, wenn die anderen Primary Key Spalten unterschiedlich sind.
Für mich ist die ID Spalte immer eindeutig.
Du hast sonst auch Probleme wenn du via Forgein-Key Tabellen miteinander verknüpfen möchtest.
-
Eine Identity-Spalte muss Unique sein, daher eigentlich auch Primary Key, sonst geht der Begriff "Identity" verloren.
Allerdings kann man für Sortierzwecke die Identity-Spalte zusätzlich auch nach anderen Schlüsseln hinzufügen.
-
Vielleicht will der Poster seine Datei nicht um eine Identity Column erweitern.
Die Zählerspalte ist schon vorhanden und ist im Unique Key enthalten.
... also warum nicht über die Sequence füllen?
Irgendwann, wenn man die Datei wieder anpacken muss, kann man auch eine Identity Spalte hinzufügen.
-
Zitat von B.Hauser
Vielleicht will der Poster seine Datei nicht um eine Identity Column erweitern.
Die Zählerspalte ist schon vorhanden und ist im Unique Key enthalten.
... also warum nicht über die Sequence füllen?
Irgendwann, wenn man die Datei wieder anpacken muss, kann man auch eine Identity Spalte hinzufügen.
@warum nicht sequenz: weil man für jede Kombination eine eigene bräuchte und spätestens, wenn die Kombinationen nicht separat nacheinander erzeugt werden, Huddel vorprogrammiert ist!
@Schlüssel später auf Identity column ändern: davon würde ich dringlichst abraten. Ich denke da an ein real world Besispiel, wo externe Berater einem Kunden für teures Geld eine "Datenbankmodernisierung" aufgeschwatzt haben. Das war dann: alle DDS erstellten Dateien auf SQL umstellen, Identity columns und allen Schnickschnack zufügen, alle Feldnamen auf längere schwafelnde Feldnamen ändern, anschließend auf diese Dateien alle vorherigen LFs erstellen, damit die Anwendung wieder passt. Richtig lustig wurde es dann, wenn die Altanwendung einen Satz gelöscht hat und dann (vermeintlich) denselben wieder eingefügt hat, der dann allerdings einen neuen Schlüssel bekam.
D*B
Similar Threads
-
By HEBORA in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 21-04-20, 12:57
-
By _MG_ in forum NEWSboard Programmierung
Antworten: 11
Letzter Beitrag: 15-01-17, 16:05
-
By _MG_ in forum NEWSboard Programmierung
Antworten: 14
Letzter Beitrag: 12-12-15, 12:07
-
By AS-Trade in forum NEWSboard Server & Hardware Markt
Antworten: 0
Letzter Beitrag: 19-10-02, 17:58
-
By Klaus in forum NEWSboard Server Software
Antworten: 0
Letzter Beitrag: 20-04-02, 18:37
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks