【问题标题】:The multi-part identifier could not be bound when altering a table更改表时无法绑定多部分标识符
【发布时间】:2016-05-03 23:30:28
【问题描述】:

我在更改 SQL 服务器中的表时遇到错误,查询是这样的:

ALTER TABLE t_OrderDetail DROP COLUMN [TotalCost];
GO
ALTER TABLE t_OrderDetail ADD TotalCost 
AS (((t_OrderDetail.[ItemQuant] * t_Item.[ItemCost]) * 17.5) / 100);

我想将公式应用于该列 - 它是商品的成本,乘以购买的数量,然后加上 17.5% 的增值税。

这就是表格的设置方式: Relationship Diagram

错误显示:

Msg 4104, Level 16, State 1, Line 3
The multi-part identifier "t_Item.ItemCost" could not be bound.

有什么建议吗?我环顾四周寻找重复的线程,但我能找到的大部分内容都是基于 SELECT 语句而不是更改列公式。提前致谢。

【问题讨论】:

  • 什么是t_Item??错误很清楚,数据库引擎不知道它是什么(我也不知道)
  • t_Item 如果您看到帖子中链接的图片是另一张桌子。
  • 忽略无法做到这一点的事实,试着想象它会如何工作,然后看看你会得到什么。当你这样做时,假装你是真正的计算机,运行一个真正的数据库引擎,通过使用你“知道”你想要达到的结果来“不要作弊”。
  • 可以在字段的条件中引用外部列,不是吗?这只是数据库中保存的两个值之间的计算
  • 你有没有想过我建议你做什么?您是否从 t_Item 表中选择了一个值?你选了哪一排?为什么是行?你知道这是怎么回事吗?

标签: sql sql-server alter-table


【解决方案1】:

问题是那个时候数据库不知道你在说什么。

即使它要弄清楚你在哪里引用另一个表,它会从哪一行得到 itemCost?

另一个问题是语法无效;你需要一个数据类型:

ALTER TABLE t_OrderDetail ADD TotalCost decimal(13,2);

我建议在一个语句中构建列,然后在另一个语句中填充。

【讨论】:

    【解决方案2】:

    这里的问题在于计算列的计算方式。计算列只能访问声明了计算列的表中的列——因此,多部分名称是不合适的。

    所以:

    ALTER TABLE t_OrderDetail
        ADD TotalCost AS (((ItemQuant * ItemCost) * 17.5) / 100);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-10
      • 2010-11-02
      • 2023-03-21
      相关资源
      最近更新 更多