【问题标题】:Get the value from a variable of a table and INSERT into the new table with extra variable for the new table not working?从表的变量中获取值并插入到新表中,新表的额外变量不起作用?
【发布时间】:2021-03-11 02:26:48
【问题描述】:

我正在测试一个 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 数据库很陌生。

【问题讨论】:

  • 请勿乱加标签
  • 你不能用一个外键指向一个还不存在的表来创建一个表。首先需要创造食物。
  • @Larnu 嗨,Larnu,Food 表是根据我展示的上述代码 sn-p 创建的。
  • 之后 Cart,所以Cart会创建失败
  • @Larnu 哦,对不起,Larnu,我明白你的意思,这有点误导。上面的代码 sn-p 只是我把这两个表合并成一个代码 sn-p 让所有的查看器都容易看,但实际上它们并没有编译在同一个地方,它们是分开的。谢谢提醒。

标签: mysql sql sql-server database vb.net


【解决方案1】:

你似乎想要这样的东西:

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 查找其余值。

【讨论】:

  • 是的,qty 是我作为参数传入的值。
  • 噢,我完全忘记了 JOIN,让我试试看。
  • 嗨,Gordan,我不知道为什么我收到一条错误消息 - 第 2 行的列名“数量”无效,这是我们按照上面显示的代码乘以的数量,它似乎 qty 没有从之前分配的 qty 中获得 2 的值。
  • 好的,我明白为什么它已经出错了,假设它是我作为参数传入的一个值。所以数量应该是2而不是数量,对不起我的错误哈​​哈。非常感谢。
猜你喜欢
  • 2022-01-04
  • 2014-08-15
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多