如何在insert语句中使用sub Query

时间:2013-12-25 10:37:18

标签: c# sql

我试过但是我收到了错误:

  

此上下文消息中不允许使用SubQuery。

我有两个表ProductCategory,并希望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 个答案:

答案 0 :(得分: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'

答案 1 :(得分:3)

试试这个

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

答案 2 :(得分: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)