14

我有一个名为Cost返回钱的计算列。

我想要另一列返回 ( Cost * 2),但它不允许我这样做。

4

2 回答 2

18

计算列不能引用其他计算列。尽管您应该能够重复您想要引用的表达式。来自 MSDN

计算列是根据可以使用同一表中其他列的表达式计算得出的。表达式可以是非计算的列名、常量、函数以及这些由一个或多个运算符连接的任意组合。表达式不能是子查询。

我还应该补充一点,如果这如您所愿,它将提出您必须处理的各种新问题。目前,跨许多列/行的更新是并行和原子地发生的。

因此,在计算中使用计算列是没有意义的,因为它还没有确切的值...... 如果有的话,您将使用旧的、未更新的值。

如果您真的想避免重复表达式,您可以在触发器中执行此操作,但我强烈建议您要这样做。触发器并不好玩,只应在极少数情况下由非常精明的人使用。

于 2009-12-04T02:11:48.470 回答
6

您必须根据表中的基列来定义它。

computed_column_expression 是定义计算列的值的表达式。计算列是没有物理存储在表中的虚拟列,除非该列被标记为 PERSISTED。该列是根据使用同一表中其他列的表达式计算得出的。例如,计算列可以具有以下定义:成本 AS 价格 * 数量。表达式可以是非计算的列名、常量、函数、变量,以及由一个或多个运算符连接的这些的任意组合。表达式不能是子查询或包含别名数据类型。

尽管您可以重构它们以使用相同的标量 UDF(传递所有相同的列)以便于维护并确保逻辑的一致性,但性能损失将是巨大的,我只使用标量 UDF 作为最后的手段。

于 2009-12-04T02:12:20.330 回答