Sql server 2005 基于另一个计算列的计算列?

Sql server 2005 基于另一个计算列的计算列?,sql-server-2005,calculated-columns,Sql Server 2005,Calculated Columns,我有一个名为Cost的计算列,它返回钱 我想让另一列返回(Cost*2),但它不允许我返回。计算列不能引用其他计算列。尽管你应该能够重复你想引用的表达式: 计算列是从可以使用同一表中其他列的表达式计算出来的。表达式可以是未计算的列名、常量、函数以及由一个或多个运算符连接的任意组合。表达式不能是子查询 我还要补充一点,如果这项工作如你所希望的那样有效,它将提出你必须处理的各种新问题。目前,跨许多列/行的更新以并行和原子方式进行 因此,在计算中使用计算列是没有意义的,因为它还没有确切的值。如果有的话

我有一个名为
Cost
的计算列,它返回钱


我想让另一列返回(
Cost*2
),但它不允许我返回。

计算列不能引用其他计算列。尽管你应该能够重复你想引用的表达式:

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

我还要补充一点,如果这项工作如你所希望的那样有效,它将提出你必须处理的各种新问题。目前,跨许多列/行的更新以并行和原子方式进行

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

如果你真的想避免重复这个表达式,你可以在触发器中这样做,尽管我强烈建议你不要那样做。触发器没有乐趣,只有在极少数情况下才能被非常精明的人使用。

你必须定义它

计算列表达式是一个 定义 计算列。计算列是 不可用的虚拟列 物理存储在表中,除非 该列被标记为持久化。这个 列是根据表达式计算的 在同一行中使用其他列的 桌子例如,计算列 可以有这样的定义:成本等于价格 *数量。表达式可以是未计算的列名、常量、, 函数、变量和任意 由一个连接的这些的组合 或更多操作员。表情 不能是子查询或包含别名 数据类型

虽然您可以对它们进行重构,以使用相同的标量UDF(在所有相同的列中传递),以便于维护并确保逻辑的一致性,但性能的影响将是巨大的,我只能将标量UDF作为最后的手段。

。。。它将提出各种各样的新问题。。。唯一的问题是阻止循环引用(其中两个计算列相互引用),服务器无论如何都必须阻止循环引用才能支持循环引用,因为它必须确定计算列的顺序。