Источник данных, вставленных в таблицу, определен как
VALUES ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n ]
| derived_table
| execute_statement
| <dml_table_source>
| DEFAULT VALUES
Таким образом, мы можем использовать производную_таблицу, которая определена как
производная_таблица
Любой допустимый оператор SELECT, который возвращает строки данных, которые должны быть загружены в таблицу.Оператор SELECT не может содержать общее табличное выражение (CTE).
INSERT INTO
MAIN
(Column1, Column2, column3)
SELECT
lc1.id,
10,
lc2.id
FROM
Lookup_Column1 lc1,
Lookup_Column2 lc2
WHERE
lc1.type = 'Apple'
and
lc2.type = 'Red'
Для получения дополнительной информации см. INSERT (Transact-SQL)
Если вы моглиПолучив значения вашей электронной таблицы в промежуточную таблицу (или связав ее с таблицей напрямую, используя связанный сервер или OPENDATASOURCE ), вы можете изменить предложение INSERT на
INSERT INTO
MAIN
( Column1, Column2, column3)
SELECT
lc1.id,
s.column2,
lc2.id
FROM
OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\YourdataSource.xls;Extended Properties=EXCEL 5.0')...[Sheet1$] s
INNER JOIN Lookup_Column1 lc1
ON s.column1 = lc1.type
INNER JOIN Lookup_Column2 lc2
ON s.column3 = lc2.type
Это позволит вам удалитьцикл, о котором вы сейчас думаете.