Udostępnij za pośrednictwem


Kolumny obliczanej

Kolumna obliczana jest obliczana z wyrażenie, można użyć innych kolumn w tej samej tabela.Wyrażenie może być nazwę kolumna noncomputed, stałych, funkcja i dowolnej kombinacji tych połączone przy użyciu jednego lub kilku operatorów.Wyrażenie nie może być podkwerenda.

Na przykład w AdventureWorks Przykładowa baza danych, TotalDue kolumnaSales.SalesOrderHeader tabela zawiera definicję: TotalDue AS Suma częściowa + TaxAmt + Transport.

Jeżeli nie określono inaczej, kolumny obliczane są wirtualne kolumny, które nie są fizycznie przechowywane w tabela.Ich wartości są obliczane ponownie za każdym razem, są one wywoływane w kwerendzie.The Database Engine uses the PERSISTED keyword in the CREATE tabela and ALTER tabela statements to physically store computed columns in the tabela. Ich wartości są aktualizowane po każdej kolumny, które są uwzględniane w obliczeniach ich zmiany.Oznaczając kolumna obliczana jako PERSISTED, można utworzyć indeks dla kolumna obliczana deterministyczny, ale nie dokładne.Ponadto, jeśli kolumna obliczana odwołuje się do funkcja środowiska CLR, Database Engine Nie można sprawdzić, czy funkcja jest naprawdę deterministyczny. W takim wypadku kolumna obliczana musi być UTRWALONE tak, aby indeksy mogą być tworzone na nim.Aby uzyskać więcej informacji zobaczTworzenie indeksów na kolumny obliczane.

Uwaga

Kolumny obliczane, które są używane jako partycjonowanie kolumny tabela partycjonowana, musi być jawnie utrwalone.

Kolumny obliczane mogą być używane w wybranych list, klauzule WHERE, klauzul ORDER BY lub innej lokalizacji, w których można używać wyrażeń regularnych, z następującymi wyjątkami:

  • Obliczona kolumn używanych jako CZEK, klucz obcy lub NOT NULL ograniczenia muszą być oznakowane PERSISTED.Kolumna obliczana może służyć jako kolumna klucza w indeksie lub jako część wszelkie ograniczenia klucz podstawowy lub UNIQUE wartość kolumna obliczana jest definiowana przez wyrażenie deterministyczny i typu danych wyniku jest dozwolony w kolumny indeksu.

    For example, if the tabela has integer columns a and b, the kolumna obliczana a + b can be indexed, but kolumna obliczana a + DATEPART(dd, GETDATE()) cannot be indexed because the value may change in subsequent invocations.

  • Kolumna obliczana nie może być docelowym instrukcja INSERT lub UPDATE.

The Database Engine automatically determines the opcje dopuszczania wartości null of computed columns based on the expressions used. Wynik wyrażenia większość uznaje się za nullable nawet wtedy, gdy tylko nonnullable kolumny są obecne, ponieważ możliwe underflows lub przepełnienie będzie powodować również wyniki wartości null.Użyj funkcja COLUMNPROPERTY z AllowsNull właściwość, aby uzyskać więcej informacji dotyczących opcje dopuszczania wartości null dowolnej kolumna obliczana w tabela.An expression that is nullable can be turned into a nonnullable one by specifying ISNULL(check_expression**,**constant), where the constant is a nonnull value substituted for any null result.