2009-12-04 140 views

回答

15

计算列不能引用其他计算列。虽然你应该能够重复你想参考的表达方式。 From MSDN

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

我还要补充一点,如果这是工作,你会希望,那么将会出现各种新问题,你必须处理。目前,许多列/行的更新以平行和原子方式进行。

因此,在您的计算中使用计算列是没有意义的,因为它不会有确切的值。如果有的话,你会使用一个旧的,未更新的值。

如果你真的想避免重复表达,你可以触发做到这一点,但我强烈建议您做到这一点。触发器是没有趣味的,只有在极少数情况下才能被非常精明的人使用。

+0

_...它会呈现各种新问题......_唯一的问题是阻止循环引用(其中两个计算列互相引用),无论如何都不得不阻止服务器支持它,因为它必须确定计算列的顺序。 – Trisped 2015-01-14 20:48:59

6

你必须定义它against the base columns in the table

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

虽然你可以重构他们都使用相同的标量UDF(通过在所有同列)为了方便维护和确保逻辑一致性,性能损失将是巨大的,而我只用标量UDF作为最后一招。