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