2013-12-25 2 views
1

Я пытался, но я получаю сообщение об ошибке:Как использовать вспомогательный запрос в вставки заявления

SubQuery are not allowed in this context message comes.

У меня есть две таблицы Product и Category и хотите использовать categoryId базу на CategoryName.

Этот запрос

Insert into Product(Product_Name,Product_Model,Price,Category_id) 
values(' P1','M1' , 100, (select CategoryID from Category where Category_Name=Laptop)) 

Пожалуйста скажите мне решение с кодом.

ответ

3

Попробуйте как этот

Insert into Product 
(
Product_Name, 
Product_Model, 
Price,Category_id 
) 
Select 
'P1', 
'M1' , 
100, 
CategoryID 
From 
Category 
where Category_Name='Laptop' 
+0

'Category_Name = Laptop' должен быть' Category_Name = 'Laptop'' –

4

(вы не четко указать, что базы данных, которую вы используете - это для 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' 
+0

Благодаря она работает в соответствии с моим требованием , – user3134342

+0

@ user3134342: если этот ответ помог вам решить вашу проблему, пожалуйста, [** принять этот ответ **] (http://meta.stackexchange.com/q/5234/153998). Это покажет вашу признательность тем, кто * провел свое время, чтобы помочь вам *. –

2

Попробуйте это:

DECLARE @CategoryID BIGINT = (select top 1 CategoryID from Category where Category_Name='Laptop') 
Insert into Product(Product_Name,Product_Model,Price,Category_id) 
values(' P1','M1' , 100, @CategoryID) 
Смежные вопросы