2016-04-25 15 views
-2

Ich habe 2 Tabellen Informationen speichern. Zum Beispiel: Tabelle 1 enthält Personen:SQL Einfügen mit Wert aus verschiedenen Tabelle

ID   NAME   CITY 

1   BOB   1 
2   JANE   1 
3   FRED   2 

Die Stadt ist eine ID zu einer anderen Tabelle:

ID   NAME 

1   Amsterdam 
2   London 

Das Problem ist, dass ich Daten eingefügt werden soll, dass ich im Format erhalten:

Angesichts der Liste der Städte ist abgeschlossen (ich bekomme nie eine Stadt, die nicht in meiner Liste ist) wie kann ich die (neue/von außen empfangene Personen) in die Tabelle mit der einfügen richtige ID für die Stadt?

Sollte ich sie ersetzen, bevor ich versuche, sie einzufügen, oder gibt es eine Leistung freundlich (ich muss möglicherweise Tausende von Zeilen auf einmal einfügen) Weg, um die SQL dies für mich tun?

Der SQL-Server ich verwende ist Microsoft SQL Server 2012

+0

Wie erhalten Sie die Daten gespeichert benutzen? –

+1

Wo ist Bob hingegangen, und wer ist Kees? – jarlh

+0

@jarlh: Das sind die einzufügenden Daten. –

Antwort

2

Zuerst laden Sie die Daten in eine Tabelle eingefügt werden.

Dann können Sie nur verwenden join:

insert into persons(id, name, city) 
    select st.id, st.name, c.d 
    from #StagingTable st left join 
      cities c 
      on st.city = c.name; 

Hinweis: Die persons.id sollte wohl eine Identitätsspalte sein, so dass es nicht notwendig wäre es einzufügen.

1
insert into persons (ID,NAME,CITY) //you dont need to include ID if it is auto increment 
values 
(1,'BOB',(select Name from city where ID=1)) //another select query is getting Name from city table 

, wenn Sie 1000 Zeilen auf einmal hinzufügen möchten, die groß sein würde, wenn man Verfahren wie dieses link

+0

Wenn ich eintausend Datensätze gleichzeitig einfüge, führt das nicht dazu, dass die Unterabfrage tausend Mal ausgeführt wird? –

+0

das wäre toll, wenn Sie gespeicherte Prozedur für das schreiben, es ist sehr effizient Thn Inline-Abfrage –

+0

Obwohl dieser Code die Frage beantworten kann, bietet zusätzlichen Kontext in Bezug auf _why_ und/oder _how_ es antwortet die Frage würde deutlich verbessern seine lange Term Wert. Bitte [bearbeiten] Sie Ihre Antwort, um eine Erklärung hinzuzufügen. –