colonne calculée sur la base d'une autre colonne calculée?
-
12-09-2019 - |
Question
J'ai une colonne calculée appelée Cost
qui retourne l'argent.
Je veux avoir une autre colonne qui retourne (Cost * 2
), mais cela ne me permet pas.
La solution
Les colonnes calculées ne peuvent pas faire référence à d'autres colonnes calculées. Bien que vous devriez être en mesure de répéter l'expression que vous souhaitez faire référence. De MSDN :
Une colonne calculée est calculée à partir d'une expression qui peut utiliser d'autres colonnes dans la même table. L'expression peut être un noncomputed nom de colonne, constante, fonction, et toute combinaison de ceux-ci connectées par un ou plusieurs opérateurs. L'expression ne peut pas être une sous-requête.
Je dois aussi ajouter que si cela devait travailler comme vous l'espoir, il présenterait toutes sortes de nouvelles questions que vous auriez à traiter. À l'heure actuelle, les mises à jour dans de nombreuses colonnes / lignes se produisent en parallèle et atomiquement.
Par conséquent, il ne serait pas logique d'utiliser une colonne calculée dans votre calcul, car il ne serait pas exactement une valeur ... encore. Si quoi que ce soit, vous seriez en utilisant une ancienne valeur non actualisée.
Si vous voulez vraiment éviter de dupliquer l'expression, vous peut faire dans un déclencheur, mais je vous conseille vivement de pas faire. Les déclencheurs sont pas amusant et ne devraient être utilisés dans de rares cas par des gens très avertis.
Autres conseils
Vous devez le définir contre les colonnes de base dans le tableau .
computed_column_expression est un expression qui définit la valeur d'un colonne calculée. Une colonne calculée est une colonne virtuelle qui ne soit pas physiquement stockées dans la table, à moins que la colonne est marquée PERSISTED. le colonne est calculée à partir d'une expression qui utilise d'autres colonnes dans la même table. Par exemple, une colonne calculée peut avoir la définition: coût AS prix * Qté. L'expression peut être un nom de colonne noncomputed, constante, fonction, variable et toute combinaison de ceux-ci reliées par une ou plusieurs opérateurs. L'expression ne peut pas être une sous-requête ou contenir des alias types de données.
Bien que vous puissiez les factoriser à la fois d'utiliser le même UDF scalaire (passe dans toutes les mêmes colonnes) pour faciliter la maintenance et assurer la cohérence de la logique, le succès de la performance serait énorme, et je n'utiliser que des FDU scalaires en dernier recours.