【发布时间】:2010-12-23 02:25:13
【问题描述】:
我有一个名为 Cost 的计算列返回钱。
我想要另一列返回 (Cost * 2),但它不允许我这样做。
【问题讨论】:
标签: sql-server-2005 calculated-columns
我有一个名为 Cost 的计算列返回钱。
我想要另一列返回 (Cost * 2),但它不允许我这样做。
【问题讨论】:
标签: sql-server-2005 calculated-columns
计算列不能引用其他计算列。尽管您应该能够重复您想要引用的表达式。 From MSDN:
计算列是根据可以使用同一表中其他列的表达式计算得出的。表达式可以是一个非计算列名、常量、函数,以及这些由一个或多个运算符连接的任意组合。表达式不能是子查询。
我还应该补充一点,如果这如您所愿,它将带来您必须处理的各种新问题。目前,跨许多列/行的更新是并行和原子地发生的。
因此,在您的计算中使用计算列是没有意义的,因为它还没有确切的值......如果有的话,您将使用旧的、未更新的值。
如果您真的想避免重复表达式,您可以在触发器中执行此操作,但我强烈建议您不要这样做。触发器并不好玩,只有在极少数情况下非常精明的人才能使用。
【讨论】:
你必须定义它against the base columns in the table。
computed_column_expression 是一个 定义 a 值的表达式 计算列。计算列是 不是的虚拟列 物理存储在表中,除非 该列标记为 PERSISTED。这 列是根据表达式计算的 使用同一列中的其他列 桌子。例如,计算列 可以有定义:成本AS价格 * 数量。表达式可以是非计算列名、常量、 函数、变量和任何 这些由一个连接的组合 或更多运营商。表达方式 不能是子查询或包含别名 数据类型。
虽然您可以重构它们以使用相同的标量 UDF(传递所有相同的列)以便于维护并确保逻辑的一致性,但性能损失将是巨大的,我只使用标量 UDF 作为最后的手段。
【讨论】: