2016-04-13 10 views
2

いくつかの列のデータ型としてnvarchar(MAX)を使用し、intをデータ型として使用するテーブルに挿入する単一のMS SQL Serverテーブルからデータを抽出しようとしています対応するnvarchar(MAX)データの場合。私はint値を提供するためにいくつかのテーブル(ルックアップテーブル?)を持っています。ルックアップテーブルを使用してテーブルをポピュレートする

MobileClientTable(ソース・テーブル)

enter image description here

LookupWeather

enter image description here

テーブルは、次の設計を有しますLookupArea

enter image description here

DestinationTable

enter image description here

いくつかのサンプルデータ:

MobileClientTable

enter image description here

LookupWeather

enter image description here

LookupArea

enter image description here

それでは、私がしたいことは、このような送信先テーブル内の行です:

ID Area Weather Details 
1 4  1   None 

エリアと天気の4と1がルックアップテーブルから取得されています。

私のSQLは錆び少しですが、私は限り、このSQL文として得ることができました:もちろん

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) 
    ); 

、構文が正しくありません。次のエラーが表示されます。

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 ')'. 

どこが間違っていますか?

+1

ドゥINSERT INTOのテーブル名(列リスト)SELECT ... – jarlh

+0

@jarlhは、あなたがそれにしてください展開することができますか? VALUESのSELECTを入れ替えても違いはありません – barry

答えて

5

valuesは、selectが使用されているため、必須ではありません。

テーブルを結合して、目的の値をそれぞれの列に挿入します。

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

私はめったに値を使用しません。例:dbo.MyTable(ColA)に挿入 'a'共用体をすべて選択 'b'共用体をすべて選択 'c'/*これはアトミックな挿入を行います*/ – granadaCoder

+0

ありがとうございます。ジョインに行く必要がある – 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 
関連する問題