INSERT INTO - Verständnisproblem

Hallo zusammen,

ich habe ein kleines Verständnisproblem beim INSERT INTO von Daten in verknüpfte Tabellen. Ich teste gerade ein wenig mit MSSQL 2005 rum und da taucht folgende Frage auf:

Eine Haupttabelle (Kunden_tbl) enthält Kundeninfos (ID, Name, Anschrift, …) und ist über die ID mit einer untergeordneten Tabelle (Kontakte_tbl) verknüpft. (ID, Kunden_ID, Name, Telefon, Email, …). Zur Verdeutlichung die dazu gehörende SELECT-Abfrage:

SELECT \* FROM Kunden\_tbl 
LEFT JOIN Kontakte\_tbl 
ON Kunden\_tbl.ID = Kontakte\_tbl.Kunden\_ID

So weit, so gut… Nun sollen die beiden Tabellen mit Daten befüllt werden. Für die Haupttabelle sehe ich noch kein Problem:

INSERT INTO Kunden\_tbl 
VALUES ('Beispiel GmbH','Korngasse 99','München',...)

Die ID wird ja vom Server vergeben.

Aber anschließend sollen n Datensätze in die untergeordnete Kontakte-Tabelle eingegeben werden:

INSERT INTO Kontakte\_tbl 
VALUES (?,'Herr Mustermann','080-12345','[email protected]', ...)

Mein Problem ist nun das ?-Zeichen… hier müsste ja die vom Server vergebene ID aus der ersten INSERT INTO rein… aber wie kieg’ ich die raus? Doch nicht über eine erneute Abfrage? Da muss es doch irgendeine elegante Lösung für geben, oder?

Gruß und Dank im Voraus
(Woly)

Hi,

Doch nicht über eine erneute Abfrage?

was spricht gegen ein

INSERT INTO TABLE2 SELECT ... FROM TABLE1...

?
Falls es beim SQL-Server auch so etwas wie

INSERT INTO ... RETURNING ID 

gibt (Oracle), könnte man sicher auch damit arbeiten.

Gruß, muzel

Hi,
http://blog.sqlauthority.com/2007/03/25/sql-server-i…

Gruss
Joey

Moin Muzel!

was spricht gegen ein

INSERT INTO TABLE2 SELECT … FROM TABLE1…

Ganz einfach: Ich will Daten nicht aus einer anderen Tabelle, sondern über ein Skript bzw. eine Eingabemaske einfügen. Außerdem löst das das Problem trotzdem nicht :wink:

Falls es beim SQL-Server auch so etwas wie

INSERT INTO … RETURNING ID

gibt (Oracle), könnte man sicher auch damit arbeiten.

Und genau danach hatte ich gesucht. Die Antwort lautet „SCOPE_IDENTITY()“ und wurde freundlicherweise von Joey geliefert…

Danke trotzdem…
(Woly)

Moin Joey,

vielen Dank für den Link - genau danach hatte ich gesucht. Bloß fehlten mir die entsprechenden Suchbegriffe :wink:

Gruß
(Woly)