基于另一个计算列的计算列?

Shi*_*mmy 11 sql-server-2005 calculated-columns

我有一个叫做Cost返回钱的计算列.

我想要另一个返回(Cost * 2)的列,但它不允许我.

Mic*_*ren 16

计算列不能引用其他计算列.虽然你应该能够重复你想要引用的表达.来自MSDN:

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

我还应该补充一点,如果这是你希望的那样,它会提出你必须处理的各种新问题.目前,许多列/行的更新以并行和原子方式发生.

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

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


Cad*_*oux 6

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

computed_column_expression是一个定义计算列值的表达式.计算列是未物理存储在表中的虚拟列,除非该列标记为PERSISTED.该列是根据使用同一表中其他列的表达式计算的.例如,计算列可以具有以下定义:cost AS price*qty.表达式可以是非计算列名,常量,函数,变量以及由一个或多个运算符连接的任何组合.表达式不能是子查询或包含别名数据类型.

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