14

Costお金を返すという計算列があります。

( ) を返す別の列が必要ですがCost * 2、許可されません。

4

2 に答える 2

18

計算列は、他の計算列を参照できません。参照したい式を繰り返すことができるはずですが。MSDN から:

計算列は、同じテーブル内の他の列を使用できる式から計算されます。式は、計算されない列名、定数、関数、および 1 つ以上の演算子で接続されたこれらの任意の組み合わせにすることができます。式をサブクエリにすることはできません。

また、これが期待どおりに機能する場合、対処しなければならないあらゆる種類の新しい問題が発生することも付け加えておきます。現在、多くの列/行にわたる更新は、並列かつアトミックに行われます。

したがって、計算で計算列を使用しても意味がありません。まだ正確な値を持っていないからです。どちらかといえば、更新されていない古い値を使用することになります。

式の重複を本当に避けたい場合は、トリガーでこれを行うことができますが、そうしないことを強くお勧めします。トリガーは楽しいものではないため、非常に精通した人がごくまれに使用する必要があります。

于 2009-12-04T02:11:48.470 に答える
6

テーブルのベース列に対して定義する必要があります。

計算列の式 計算列の値を定義する式です。計算列は、列が PERSISTED とマークされていない限り、テーブルに物理的に格納されていない仮想列です。列は、同じテーブル内の他の列を使用する式から計算されます。たとえば、計算列には次の定義を含めることができます: cost AS price * qty. 式は、計算されない列名、定数、関数、変数、および 1 つ以上の演算子で接続されたこれらの任意の組み合わせにすることができます。式をサブクエリにしたり、エイリアス データ型を含めたりすることはできません。

両方をリファクタリングして同じスカラー UDF を使用する (すべて同じ列を渡す) ことで、メンテナンスを容易にし、ロジックの一貫性を確保することができますが、パフォーマンスへの影響は非常に大きく、最後の手段としてスカラー UDF のみを使用します。

于 2009-12-04T02:12:20.330 に答える