Berechnete Spalten

Eine berechnete Spalte wird aus einem Ausdruck berechnet, der andere Spalten in derselben Tabelle verwenden kann. Der Ausdruck kann der Name einer nicht berechneten Spalte, eine Konstante, eine Funktion oder eine beliebige durch einen oder mehrere Operatoren verbundene Kombination der genannten Möglichkeiten sein. Der Ausdruck kann keine Unterabfrage sein.

In der AdventureWorks2008R2-Beispieldatenbank hat beispielsweise die TotalDue-Spalte der Sales.SalesOrderHeader-Tabelle folgende Definition: TotalDue AS Subtotal + TaxAmt + Freight.

Wenn nichts anderes angegeben wird, handelt es sich bei berechneten Spalten um virtuelle Spalten, die nicht physisch in der Tabelle gespeichert sind. Die darin enthaltenen Werte werden jedes Mal neu berechnet, wenn in einer Abfrage darauf verwiesen wird. Database Engine (Datenbankmodul) verwendet das Schlüsselwort PERSISTED in den Anweisungen CREATE TABLE und ALTER TABLE, um berechnete Spalten physisch in der Tabelle zu speichern. Die enthaltenen Werte werden aktualisiert, wenn sich Spalten ändern, die Teil der Berechnung sind. Sie können einen Index für eine berechnete Spalte erstellen, die deterministisch aber nicht präzise ist, indem Sie eine berechnete Spalte als PERSISTED kennzeichnen. Zudem kann Database Engine (Datenbankmodul) nicht überprüfen, ob die Funktion wirklich deterministisch ist, wenn eine berechnete Spalte auf eine CLR-Funktion verweist. In diesem Fall muss die berechnete Spalte als PERSISTED gekennzeichnet sein, damit Indizes für sie erstellt werden können. Weitere Informationen finden Sie unter Erstellen von Indizes für berechnete Spalten.

HinweisHinweis

Sämtliche berechnete Spalten, die als Partitionierungsspalten einer partitionierten Tabelle verwendet werden, müssen ausdrücklich dauerhaft sein.

Berechnete Spalten können in Auswahllisten, WHERE-Klauseln, ORDER BY-Klauseln oder an anderen Stellen verwendet werden, an denen reguläre Ausdrücke verwendet werden können. Dabei gelten folgende Ausnahmen:

  • Berechnete Spalten, die als CHECK-, FOREIGN KEY- oder NOT NULL-Einschränkungen verwendet werden, müssen als PERSISTED gekennzeichnet sein. Eine berechnete Spalte kann als Schlüsselspalte in einem Index oder als Teil einer PRIMARY KEY- oder UNIQUE-Einschränkung verwendet werden, wenn der Wert der berechneten Spalte durch einen deterministischen Ausdruck definiert ist und der Datentyp des Ergebnisses in Indexspalten zulässig ist.

    Wenn eine Tabelle beispielsweise die beiden Spalten für ganze Zahlen a und b hat, kann für die berechnete Spalte a + b ein Index erstellt werden, aber die berechnete Spalte a + b kann nicht indiziert werden, da sich der Wert in späteren Aufrufen ändern kann.

  • Eine berechnete Spalte kann nicht das Ziel einer INSERT- oder UPDATE-Anweisung sein.

Database Engine (Datenbankmodul) bestimmt automatisch die NULL-Zulässigkeit berechneter Spalten basierend auf dm verwendeten Ausdruck. Das Ergebnis der meisten Ausdrücke wird als NULL-zulässig erachtet, auch wenn nur Spalten vorhanden sind, die keine NULL-Werte zulassen, da mögliche Unterläufe oder Überläufe auch NULL-Ergebnisse erzeugen. Verwenden Sie die COLUMNPROPERTY-Funktion mit der AllowsNull-Eigenschaft, um die NULL-Zulässigkeit sämtlicher berechneter Spalten in einer Tabelle zu untersuchen. Ein Ausdruck, der NULL-Werte zulässt, kann durch die Angabe von ISNULL(check_expression**,**constant) in einen Ausdruck umgewandelt werden, der keine NULL-Werte zulässt, wobei constant ein Wert ungleich NULL ist, durch den jedes NULL-Ergebnis ersetzt wird.