2009-12-04 14 views

Répondre

15

Les colonnes calculées ne peuvent pas référencer 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. From MSDN

Une colonne calculée est calculée à partir d'une expression pouvant utiliser d'autres colonnes dans la même table. L'expression peut être un nom de colonne non calculé, une constante, une fonction et toute combinaison de ceux-ci connectés par un ou plusieurs opérateurs. L'expression ne peut pas être une sous-requête.

Je devrais également ajouter que si cela devait fonctionner comme vous l'espériez, cela présenterait toutes sortes de nouveaux problèmes que vous auriez à traiter. Actuellement, les mises à jour sur plusieurs colonnes/lignes se produisent en parallèle et de manière atomique.

Par conséquent, il ne serait pas logique d'utiliser une colonne calculée dans votre calcul car elle n'aurait pas encore de valeur ... pour le moment. Si quelque chose, vous utiliseriez une ancienne valeur non mise à jour.

Si vous voulez vraiment éviter de dupliquer l'expression, vous pourrait faire dans un déclencheur, mais je vous conseille vivement de ne pas faire. Les déclencheurs ne sont pas amusants et devraient seulement être utilisés par des gens très avertis dans de rares cas.

+0

_... il présenterait toutes sortes de nouveaux problèmes ..._ Le seul problème serait d'empêcher les références circulaires (où deux colonnes calculées se réfèrent mutuellement) qui devraient être empêchées de toute façon pour que le serveur le supporte, car il faudrait déterminer l'ordre de calcul des colonnes. – Trisped

6

Vous devez le définir against the base columns in the table.

computed_column_expression est une expression qui définit la valeur d'une colonne calculée . Une colonne calculée est une colonne virtuelle qui n'est pas physiquement stockée dans la table, sauf si la colonne est marquée PERSISTED. La 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 non calculé, une constante, une fonction , une variable et toute combinaison connectée par un 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 comme dernier recours.

Questions connexes