我正在测试一个VB.NET项目的SQL查询,该项目在用户选择食物数量后,将食物的详细信息插入到添加到购物车功能的表中。
该查询将从名为food的表中获取食品详细信息,如食品名称和食品价格,并需要将所有食品详细信息与数量和小计一起添加到名为Cart
我想从Food表中获得值,以及用户和INSERT输入到Cart表中的一些数量。
但是,有一个问题是,当我在SQL查询编译器中测试查询时,我想要添加的值显示的列名无效。
这是错误
Msg 4104, Level 16, State 1, Line 3
The multi-part identifier "Food.Id" could not be bound.
Msg 4104, Level 16, State 1, Line 3
The multi-part identifier "Food.foodName" could not be bound.
Msg 4104, Level 16, State 1, Line 3
The multi-part identifier "Food.price" could not be bound.
Msg 4104, Level 16, State 1, Line 3
The multi-part identifier "Food.price" could not be bound.
Msg 207, Level 16, State 1, Line 3
Invalid column name 'qty'.
这是我的SQL查询命令。注意:整数和数学计算只是为了测试,我将在程序中更改为参数化查询
SELECT * FROM Cart
INSERT INTO Cart (foodID, foodName, foodPrice, [qty], total)
VALUES (Food.Id, Food.foodName, Food.price, 2, Food.price * qty)
SELECT Id, foodName, price
FROM Food
WHERE foodName = 'BREAKFAST'
SELECT * FROM Cart
这是我创建的表格
CREATE TABLE [dbo].[Cart] (
[Id] INT IDENTITY (100000, 1) NOT NULL,
[foodID] INT NOT NULL,
[foodName] VARCHAR(50) NOT NULL,
[foodPrice] DECIMAL (18, 2) NOT NULL,
[qty] INT NOT NULL,
[total] DECIMAL (18, 2) NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
FOREIGN KEY ([foodID]) REFERENCES [dbo].[Food] ([Id]),
);
CREATE TABLE [dbo].[Food] (
[Id] INT IDENTITY (100, 1) NOT NULL,
[foodName] VARCHAR (50) NOT NULL,
[price] DECIMAL (18, 2) NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
我很确定问题是我放入VALUE的变量不正确,我不确定将另一个表中的变量放入VALUE正确方法是什么?很抱歉提出这个问题,因为我对SQL数据库还很陌生。
您似乎想要这样的东西:
INSERT INTO Cart (foodID, foodName, foodPrice, [qty], total)
SELECT f.Id, f.foodName, f.price, 2, f.price * qty
FROM Food f
WHERE f.foodName = 'BREAKFAST'
我不知道qty
从哪里来。大概,你把它作为某种参数传入
此外,您的数据模型没有规范化,这是一件坏事。您应该将foodID
包含在购物车中,并使用JOIN
查找其余值。