我有一个计算列叫做Cost
,它返回货币值。
我想要另外一个列返回(Cost * 2
)的结果,但是不允许我这样做。
我有一个计算列叫做Cost
,它返回货币值。
我想要另外一个列返回(Cost * 2
)的结果,但是不允许我这样做。
计算列不能引用其他计算列。虽然您可以重复要引用的表达式。来自 MSDN 的说明:
计算列是从可以使用同一表中的其他列的表达式计算而来。该表达式可以是非计算列名称、常量、函数以及任何一组由一个或多个运算符连接起来的这些内容。该表达式不能是子查询。
我还应补充一点,如果它按照你所希望的那样工作,将会出现各种新问题需要处理。目前,在许多列/行之间进行更新是并行和原子的。
因此,在您的计算中使用计算列并不合理,因为它实际上没有值...尚未。如果有什么问题,您可能会使用旧的、未更新的值。
如果您真的想避免重复表达式,则可以在触发器中执行此操作,但我强烈建议您不要这样做。触发器不好玩,只有极为熟练的人在极少数情况下才应使用。
您必须根据表中的基本列对其进行定义。
computed_column_expression是定义计算列值的表达式。计算列是一种虚拟列,除非该列标记为PERSISTED,否则不会在表中物理存储。该列从使用同一张表中的其他列构建的表达式中计算而来。例如,计算列可以有如下定义:cost AS price * qty。表达式可以是非计算列名称、常量、函数、变量以及一个或多个操作符相连接的任何组合。表达式不能是子查询或包含别名数据类型。
尽管您可以将它们都重构为使用相同的标量UDF(传入所有相同的列)以便进行更轻松的维护并确保逻辑的一致性,但性能损失将是巨大的,因此我只在最后一步才使用标量UDF。