PDA

View Full Version : SQL Auto Increment



Seiten : 1 [2] 3 4

Fuerchau
27-01-10, 17:35
NEXT VALUE geht nicht beim Select!

Die Syntax ist
insert into myfile
(seqfld, feld1, feld2, feld3)
values(next value for myseq, wert1, wert2, wert3)

Du siehst, ein "Insert ... select ... from ..." funktioniert hier nicht.

Du musst dann die Tabelle mit einer AutoIncrement-Feld erstellen und dieses Feld beim Insert dann weglassen:

create mytable (myseq as identity, ...)

PS:
Hier noch mal ein genaues Beispiel aus dem Handbuch:


CREATE TABLE EMPLOYEE2 (
EMPNO INTEGER GENERATED ALWAYS AS IDENTITY,
ID SMALLINT,
NAME CHAR(30),
SALARY DECIMAL(5,2),
DEPTNO SMALLINT)

B.Hauser
28-01-10, 06:21
Das Problem ist, dass NEXT Value For nicht direkt in Verbindung mit Union-Anweisungen zulässig ist.

Das Statement sollte funktionieren, wenn Du die Union-Anweisung als Sub-Select definierst.

Etwa so:

insert into LastTable (DNr, Dlabel, DName)
(Select Next Value for Seq_Zaehler, x.*
From (Select FldLabel, FldName from MyTable
Union All
Select XYZLabel, XYZName from NextTable) x

Birgitta

holgerscherer
28-01-10, 11:32
Diese Auto Increment Felder sind da ein typisches Beispiel: was mit einer einzigen zentralen Procedure getKey(Dateiname, Feld) einfach und durchschaubar programmierbar war...

Dieses Feature kann nur in der Fassenacht entstanden sein.


Dieter, Du weisst doch, wieviele Features (gerade in unserer Branche) im Vollsuff (tschuldigung) entstanden sind - und alle freuen sich auch noch drüber. Früher hat man als Notlösung MAX() auf einen Key genommen. Und? Geht immer noch, wenn man denn einen passenden Key hat.

Mal schauen, was V7R1 an netten Fassenachtsüberraschungen mit sich bringt.

Helau,

-h

BenderD
28-01-10, 12:01
... mal abgesehen davon, dass max schief geht wenn zwei das glleichzeitig versuchen ohne die ganze Table zu sperren, vielleicht gibt es ja kein V7R1 mehr, weil dass dann VauEi heißt, oder die AS/400 dem Auto decrement zum Opfer fällt
http://upload.wikimedia.org/wikipedia/commons/1/11/Deritend_Car_Park.jpg

D*B


Dieter, Du weisst doch, wieviele Features (gerade in unserer Branche) im Vollsuff (tschuldigung) entstanden sind - und alle freuen sich auch noch drüber. Früher hat man als Notlösung MAX() auf einen Key genommen. Und? Geht immer noch, wenn man denn einen passenden Key hat.

Mal schauen, was V7R1 an netten Fassenachtsüberraschungen mit sich bringt.

Helau,

-h

holgerscherer
28-01-10, 12:53
... mal abgesehen davon, dass max schief geht wenn zwei das glleichzeitig versuchen ohne die ganze Table zu sperren, vielleicht gibt es ja kein V7R1 mehr, weil dass dann VauEi heißt, oder die AS/400 dem Auto decrement zum Opfer fällt
http://upload.wikimedia.org/wikipedia/commons/1/11/Deritend_Car_Park.jpg

D*B

ROFL, so würd ich gern mal die Autos der Nachbarn parken, die immer wüst in der Gegend rumstehen.

Von einem guten Locking ging ich aus, andererseits braucht man so selten Zählerspalten, wenn das Datenmodell sauber ist.

Übrigens - bis jetzt heissts überall V7R1, aber Vi (oder iV7) wäre auch mal was neues.

Wo Apple doch grade das iPad (EiPatt) rausbringt, wäre ein iAm vielleicht angebracht?

-h

B.Hauser
28-01-10, 13:03
ROFL, so würd ich gern mal die Autos der Nachbarn parken, die immer wüst in der Gegend rumstehen.

Von einem guten Locking ging ich aus, andererseits braucht man so selten Zählerspalten, wenn das Datenmodell sauber ist.

Übrigens - bis jetzt heissts überall V7R1, aber Vi (oder iV7) wäre auch mal was neues.

Wo Apple doch grade das iPad (EiPatt) rausbringt, wäre ein iAm vielleicht angebracht?

-h

Soweit ich weiß heißt es ja auch schon nicht mehr V6R1M0 sondern offiziell (IBM) i 6.1 und das nächste wird dann IBM i 7.1

Birgitta

holgerscherer
28-01-10, 13:22
Soweit ich weiß heißt es ja auch schon nicht mehr V6R1M0 sondern offiziell (IBM) i 6.1 und das nächste wird dann IBM i 7.1


ja, IBM i 7.1 ist eher offiziell, aber das ist ein sehr schlechter Suchbegriff für die Suchmaschine. Da ist V7R1 oder R710 eher geeignet, und in vielen Dokumenten werden auch diese Strings verwendet :)

-h

BenderD
28-01-10, 15:48
... zumindest bei Google ist das kein Problem!

Ergebnisse 1 - 10 von ungefähr 28.000 für V6R1M0.
Ergebnisse 1 - 10 von ungefähr 73.400.000 für i 6.1

=> Ziel erreicht: Bekanntheit signifikant gesteigert, obwohl der neuere Name noch garnicht auf allen Seiten aktualisiert ist

D*B


ja, IBM i 7.1 ist eher offiziell, aber das ist ein sehr schlechter Suchbegriff für die Suchmaschine. Da ist V7R1 oder R710 eher geeignet, und in vielen Dokumenten werden auch diese Strings verwendet :)

-h

holgerscherer
28-01-10, 16:07
... zumindest bei Google ist das kein Problem!

Ergebnisse 1 - 10 von ungefähr 28.000 für V6R1M0.
Ergebnisse 1 - 10 von ungefähr 73.400.000 für i 6.1


Lach :-)

Wenn wir schon dabei sind:

V6R1 -> ungefähr 128.000
R610 -> ungefähr 778.000
i -> ungefähr 6.450.000.000 (na immerhin)
OS/400 -> ungefähr 15.100.000

Naja. Spass beiseite, ich kämpf noch ein wenig mit der Schweinegrippe rum...

-h

Spateneder
28-01-10, 18:43
Schön, wie dieser Thread abgedriftet ist!
Mein Vorschlag, um den Bekanntheitsgrad noch einmal richtig voranzubringen: Das "i" (ich meine den unteren Strich) weglassen und nur noch den Punkt verwenden. Jeder Punkt gilt! Das wäre doch auch für Google eine schöne neue Aufgabe ... (und wieder drei Punkte)