(вы не четко указать, что базы данных, которую вы используете - это для SQL Server но должен применяться к другим, а также, с некоторыми незначительными различиями)
Команда INSERT
приходит в двух вариантах:
(1) либо у вас есть все ваши ценности доступны, как литералы или переменные SQL Server - в этом случае вы можете использовать INSERT .. VALUES()
подход:
INSERT INTO dbo.YourTable(Col1, Col2, ...., ColN)
VALUES(Value1, Value2, @Variable3, @Variable4, ...., ValueN)
Примечание: Я бы рекомендовал всегда явно указать список столбца для вставки данных в - таким образом, вы не будете иметь никаких неприятных сюрпризов, если вдруг ваша таблица имеет дополнительный столбец, или если ваш таблицы имеют IDENTITY
или вычисленный столбец. Да - это немного больше работы - один раз - но тогда у вас есть свой оператор INSERT
как твердый, как он может быть, и вам не придется постоянно возиться с ним, если ваша таблица меняется.
(2) если вы не все ваши ценности, как литералы и/или переменных, но вместо этого вы хотите, чтобы полагаться на другую таблицу, несколько таблиц или представлений, чтобы обеспечить значения, то можно использовать INSERT ... SELECT ...
подход:
INSERT INTO dbo.YourTable(Col1, Col2, ...., ColN)
SELECT
SourceColumn1, SourceColumn2, @Variable3, @Variable4, ...., SourceColumnN
FROM
dbo.YourProvidingTableOrView
Здесь, вы должны точно определить, как много элементов в SELECT
как ваши INSERT
предпологает - и те могут быть столбцы из таблицы (ы) (или просмотра (ов)), или это могут быть литералы или переменные. Опять же: явно укажите список столбцов для вставки - см. Выше.
Вы можете использовать одну или другую - но вы не можете смешивать два - вы не можете использовать VALUES(...)
, а затем иметь SELECT
запрос в середине вашего списка значений - выбрать одно из двух - придерживаться Это.
Так что в вашем конкретном случае, вы должны будете использовать:
INSERT INTO dbo.Product(Product_Name, Product_Model, Price, Category_id)
SELECT
' P1', 'M1', 100, CategoryID
FROM
dbo.Category
WHERE
Category_Name = 'Laptop'
'Category_Name = Laptop' должен быть' Category_Name = 'Laptop'' –