2016-04-13 11 views
2

Ich versuche, Daten aus einer einzigen MS SQL Server-Tabelle zu extrahieren, die Nvarchar (MAX) als Datentyp für ein paar Spalten verwendet und fügen Sie es in eine Tabelle ein, die Ints als Datentyp verwendet für die entsprechenden nvarchar (MAX) -Daten. Ich habe ein paar Tabellen (Nachschlagetabellen?), Um die int-Werte zu liefern.Füllen Tabelle mit Lookup-Tabellen

Die Tabellen haben die folgenden Ausführungen:

MobileClientTable (die Quelltabelle)

enter image description here

LookupWeather

enter image description here

LookupArea

enter image description here

Destination

enter image description here

Einige Beispieldaten:

MobileClientTable

enter image description here

LookupWeather

enter image description here

LookupArea

enter image description here

So was würde ich wie diese sind Zeilen in der Zieltabelle mag:

wobei 4 und 1 für Fläche und Wetter aus den Nachschlagetabellen ermittelt wurden.

My SQL ist ein bisschen rostig, aber ich habe es geschafft, soweit dieser SQL-Anweisung zu erhalten:

USE [ETLTest] 
GO 

INSERT INTO DestinationTable(ID, Area, Weather, Details) VALUES 
    (
     (SELECT ID FROM dbo.MobileClientTable), 
     (SELECT ID FROM dbo.LookupArea WHERE Area = dbo.MobileClientTable.Area), 
     (SELECT ID FROM dbo.LookupWeather WHERE Weather = dbo.MobileClientTable.Weather, 
     (SELECT AnyOtherDetails FROM dbo.MobileClientTable) 
    ); 

Natürlich ist die Syntax falsch ist. Ich erhalte folgende Fehler:

Msg 156, Level 15, State 1, Line 6 
Incorrect syntax near the keyword 'SELECT'. 
Msg 102, Level 15, State 1, Line 6 
Incorrect syntax near ')'. 
Msg 102, Level 15, State 1, Line 7 
Incorrect syntax near '+'. 
Msg 102, Level 15, State 1, Line 9 
Incorrect syntax near ')'. 

Wohin gehe ich falsch?

+1

INTO Tabellenname INSERT Do (Spaltenliste) SELECT ... – jarlh

+0

@jarlh können Sie auf, dass erweitern bitte? Das einfache Auswechseln von SELECT für VALUES hat keinen Unterschied gemacht – barry

Antwort

5

values ist nicht erforderlich, da select verwendet wird.

Verbinden Sie die Tabellen, um die gewünschten Werte in die entsprechenden Spalten einzufügen.

INSERT INTO DestinationTable(ID, Area, Weather, Details) 
SELECT mc.ID , a.id, w.id, mc.anyotherdetails 
FROM dbo.MobileClientTable mc 
join dbo.LookupWeather w on w.Weather = mc.Weather 
join dbo.LookupArea a on a.Area = mc.Area 
+0

Ich verwende selten "Werte" mehr. Beispiel: Einfügen in dbo.MyTable (ColA) Wählen Sie 'a' union alle wählen 'b' union alle wählen Sie 'c'/* das gibt Ihnen atomare Einsätze */ – granadaCoder

+0

Danke dafür. Müssen gehen und sich über Joins informieren – barry

1
INSERT INTO DestinationTable(ID, Area, Weather, Details) 
    SELECT a.ID, b.Area, c.Weather, d.AnyOtherDetails 
    FROM dbo.MobileClientTable a 
    JOIN dbo.LookupArea b ON a.Area=b.Area 
    JOIN dbo.LookupWeather c ON c.Weather = a.Weather