2016-04-13 2 views
2

Я пытаюсь извлечь данные из одной таблицы MS SQL Server, которая использует nvarchar (MAX) в качестве типа данных для нескольких столбцов и вставляет ее в таблицу, которая использует типы данных в качестве типа данных для сопоставления данных 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 для области и погоды получены из таблиц поиска.

My 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 вы можете расширить, что, пожалуйста? Просто замена SELECT для VALUES не имеет значения – 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

Я редко использую «значения». ex: Вставить в dbo.MyTable (ColA) Выбрать 'a' union all select 'b' union all select '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 
Смежные вопросы