# Fortlaufende ID (Primärschlüssel-Kein Autowert) - bei einer Anfügeabfrage



## -Verzweifelt- (12. Oktober 2010)

Hallo zusammen,

meine Problem ist, dass ich in einer vorhandenen Tabelle mit forlaufender ID (kein Autowert, Duplikate nicht möglich), welche als Primärschlüssel festgelegt ist, ein paar Datensätze aus einer Abfrage anfügen möchte und somit auch die ID setzen muss.

D.h. es soll einfach bei der letzten Nummer (ID) weitergezählt werden

Die Datenbank stammt nicht von mir, muss aber diese Anfügemöglichkeiten bewerkstelligen 

danke für euere Hilfe


----------



## Yaslaw (12. Oktober 2010)

Um was für eine Datenbank handelt es sich? Oracle? MS SQL? MySQL? MS Access? Pervasive? Postgre SQL? SQLite? oder sonstwas?
Je nachdem kann die Lösung ganz anderst aussehen


----------



## -Verzweifelt- (12. Oktober 2010)

sorry, es handelt sich hierbei um MS ACCESS


----------



## Yaslaw (12. Oktober 2010)

Hab grad kein Access hier. Ich schau mal morgen im Büro.

Nur um dich richtig verstanden zu haben.
Du hast eine Abfrage A, die Daten in der Form liefert wie du sie für den INSERT brauchst.
Du willst eine INSERT-Abfrage B in die Tabelle C mit den Resultaten der Abfrage A.
Die ID in C muss eindeutig sein.

Ah, MS Access - ärgerlich. Da geht das meiste was man mit SQL machen kann nur über komplexe Umwege.
Welche Version von MS Access hast du?


----------



## -Verzweifelt- (12. Oktober 2010)

Die Zieldatenbank hat die Endung .mdb - damit gehe ich von Access 2002 (o.ä.) aus. Ich greife mit access 2007 zu.

in der Zieltabelle befinden sich Artikeln wie z.B:

ID, FremdID, Produktname, Bild, ...

12345, 66-44-55, Blauer Regenschirm, ....  --> wobei ID kein Autowert ist und als Primärschlüssel festgelegt ist

jetzt soll ich von einer 2. Datenbank (access 2007) die Produkte in die Zieldatenbank anfügen. Die Angefügten (neuen Artikel) sollen dann mit den neuen "ID"s angelegt werden
Bsp:
12346, 12-34-56, schwarzer Regenschirm, ...
12347, 66-88-99, gelber Regenmantel, ..

die neuen Artikeldaten stammen ausschliesslich aus der Quelldatenbank (Access 2007) und sollen den richtigen Feldern der Zieltabelle zugeordnet bzw. angefügt werden ("nur" die generierte fortlaufende ID muss mit erstellt werden, damit die Datensätze angefügt werden können)

wenn es nicht anders gehen sollte, dann würde ich ein Button im Forumular erstellen, welches dann ein VB-Script startet (wäre mir fast lieber, wenn es funktionieren sollte)

Hoffe nur es gut beschrieben zu haben


----------



## Yaslaw (12. Oktober 2010)

Es geht über beides. Per SQL ists normalerweise schneller.

Ich habe für meinen Test eine Tabelle tbl1 mit den Feldern id, desc
Dann habe ich eine Abfrage vw1 mit denselben Feldern. 
Jetzt erstelle ich 3 weitere Abfragen.


```
-- View: lastIdFromTbl1
SELECT Max([id]) AS lastid
FROM tbl1;
```

Dann erstelle ich eine View die auf meine Abfrage zugreift und den Resultaten eine Zeilennummer zuordnet. Wie das geht habe ich hier gefunden http://www.coding-board.de/board/showthread.php?t=3872)

```
--View: vw1WithRownum
SELECT 
	Count(*) AS rownum,
	v1.desc
FROM 
	vw1 AS v1, 
	vw1 AS v2
WHERE 
	v1.id>=[v2].[id]
GROUP BY 
	v1.id, 
	v1.desc;
```

Und diese kann man nun kombinieren zu einer INSERT-Abfrage

```
INSERT INTO tbl1 ( id, [desc] )
SELECT 
    [lastid]+[rownum] AS newId, 
    vw1WithRownum.desc
FROM 
    lastIdFromTbl1, 
    vw1WithRownum;
```


----------



## -Verzweifelt- (12. Oktober 2010)

die 1. Abfrage ist mir klar
die 3. ist mir eigentlich auch klar

nur bei der 2. Abfrage habe ich keine Idee wie ich das auf meine Tabellen umsetzen kann/soll.

Ich versuch es nochmals mit der Erklärung der Lage:

Zieltabelle:
ID, FremdID, Artikel, ....

Quelltabelle: 
ID_Fremd, Artikel, ....

Ursprünglich habe ich einen Joint (FremdID und ID_Fremd) zwischen den 2 Tabellen gemacht (alle Artikel aus Quelltabelle und nur Artikel aus Ziel) und somit sehe ich auch ein paar Datensätze wo u.a. FremdID leer ist ==> Kriterium FremdID ist null==> ich sehe die Artikel aus der Quelltabelle welche in der Ziel fehlen würden.

Und hier solllte die Rownum hochzählen, soweit ich das verstanden habe, damit sie später zu berechnung verwendet werden kann.


----------



## Yaslaw (12. Oktober 2010)

Deine jetztiges Query mit dem Join und allem speicherst du. Das ist dann das was bei der 2ten Abfrage vw1 ist.


----------



## -Verzweifelt- (12. Oktober 2010)

echt Klasse, hat super funktioniert.

Eines muss man sagen, der Support war super (Reaktionszeit, Produktivität und Verständnis) - einfach TOP ************************


----------

