Frage

Ich habe eine berechnete Spalte namens Cost das gibt Geld zurück.

Ich möchte eine weitere Spalte haben, die zurückgibt (Cost * 2), aber es erlaubt mir nicht.

War es hilfreich?

Lösung

Berechnete Spalten können keine andere berechnete Spalten verweisen. Obwohl Sie sollten in der Lage sein, nur den Ausdruck zu wiederholen Sie mögen, verweisen. Von MSDN :

  

Eine berechnete Säule wird aus einem Ausdruck berechnet werden, die anderen Spalten in der gleichen Tabelle verwenden kann. Der Ausdruck kann durch einen oder mehrere Betreiber verbunden ein noncomputed Spaltenname, eine Konstante, eine Funktion und eine beliebige Kombination von diesen sein. Der Ausdruck kann nicht eine Unterabfrage sein.

Ich möchte auch hinzufügen, dass, wenn diese, wie Sie hoffen würde arbeiten, würde es alle Arten von neuen Themen präsentieren würden Sie zu tun haben. Derzeit Updates über viele Spalten / Zeilen auftreten parallel und atomar.

Daher wäre es nicht sinnvoll, eine berechnete Spalte in der Berechnung zu verwenden, da es nicht genau einen Wert haben würde ... noch. Wenn überhaupt, dann würden Sie einen alten, nicht-aktualisierten Wert sein werden.

Wenn Sie wirklich vermeiden wollte den Ausdruck Duplizieren Sie könnte tun dies in einem Trigger, obwohl ich Sie stark drängen nicht tun. Auslöser sind kein Spaß und sollten nur von sehr versierten Menschen in seltenen Fällen verwendet werden.

Andere Tipps

Sie müssen es definieren gegen die Basisspalten in der Tabelle.

computed_column_expression ist ein Ausdruck, der den Wert einer berechneten Spalte definiert.Eine berechnete Spalte ist eine virtuelle Spalte, die in der Tabelle nicht physikalisch gespeichert ist, es sei denn, die Spalte ist persistiert gekennzeichnet.Die Spalte wird aus einem Ausdruck berechnet, der andere Spalten in derselben Tabelle verwendet.Beispielsweise kann eine berechnete Spalte die Definition haben:Kosten als Preis * qty.Der Ausdruck kann ein nicht erfundener Spaltenname, Konstante, Funktion, Variable und eine beliebige Kombination von diesen sein, die durch einen oder mehrere Operatoren verbunden sind.Der Ausdruck kann keine Unterabfrage sein oder Alias ​​-Datentypen enthalten.

Sie könnten zwar beide umgestalten, um die gleiche skalare UDF zu verwenden (in allen gleichen Spalten zu übergeben), um die Wartung zu vereinfachen und die Konsistenz der Logik sicherzustellen, der Leistungseinbruch wäre jedoch enorm, und ich verwende skalare UDFs nur als letzten Ausweg.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top