computed_column_definition (języka Transact-SQL)
Określa właściwości obliczanej kolumna , która jest dodawana do tabela za pomocą ALTER TABLE.
Składnia
column_name AS computed_column_expression
[ PERSISTED [ NOT NULL ] ]
[
[ CONSTRAINT constraint_name ]
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = fillfactor ]
[ WITH ( <index_option> [, ...n ] ) ]
[ ON { partition_scheme_name (partition_column_name ) | filegroup
| "default" } ]
| [ FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { NO ACTION | CASCADE } ]
[ ON UPDATE { NO ACTION } ]
[ NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ] ( logical_expression )
]
Argumenty
column_name
Jest to nazwa kolumna zmienione, dodane lub usunięte.column_namemoże być od 1 do 128 znaków.Dla nowej kolumny column_name może być pominięty w przypadku łamy utworzone za pomocą timestamp typu danych.Jeśli nie column_name określonych dla timestamp Typ danych kolumna, nazwa timestamp jest używana.computed_column_expression
To wyrażenie , które definiuje wartość kolumnaobliczanej.kolumna obliczana jest wirtualnego kolumna nie jest fizycznie przechowywane w tabela , ale liczonego od wyrażenie , które używa innych kolumn w tej samej tabela.Na przykład, obliczanej kolumna może mieć definicji: costAS price * qty.wyrażenie może być nazwa noncomputed kolumna , stała, funkcja, zmienna i dowolnej kombinacji tych połączonych przez jeden lub więcej operatorów.wyrażenie nie może być podzapytanie ani zawierać typ danych alias .Kolumny obliczane mogą być używane w listach select, klauzule WHERE, klauzul ORDER BY lub innych miejsc, gdzie można używać wyrażeń regularnych, ale z następującymi wyjątkami:
Nie można użyć kolumna obliczanej jako domyślny lub klucz OBCY definicji ograniczenia lub z definicji ograniczenia NOT NULL.Jednak jeśli wartość obliczanej kolumna jest definiowana przez firmy Deterministic Networks wyrażenie typu danych wyniku jest dozwolony w kolumny indeksu, obliczanej kolumna może służyć jako klucz kolumna w indeksie lub jako część wszelkie ograniczenia na klucz podstawowy lub unikatowe.
Na przykład, jeśli tabela zawiera kolumny całkowitą i b, obliczanej kolumna a + b mogą być indeksowane, ale obliczane kolumna a + DATEPART (dd-GETDATE()) nie mogą być indeksowane, ponieważ wartość mogą ulec zmianie w kolejnych wywołania.
kolumna obliczana nie może być miejsce docelowe INSERT lub UPDATE instrukcja.
Ostrzeżenie
Ponieważ każdy wiersz w tabela może mieć różne wartości w kolumnaobliczanej kolumny, obliczanej kolumna nie może mieć ten sam wynik dla każdego wiersza.
UTRWALONE
Określa, że Aparat baz danych będzie fizycznie przechowywania obliczonych wartości w tabelai zaktualizować wartości po zaktualizowaniu innych kolumn, od których zależy kolumna obliczanej.Oznakowanie kolumna obliczanej jako PERSISTED umożliwia indeks utworzony dla obliczanej kolumna firmy Deterministic Networks, ale nie dokładne.Aby uzyskać więcej informacji, zobacz Tworzenie indeksów kolumny obliczanej.Kolumny obliczane, używane jako partycjonowanie kolumny tabela partycjonowana muszą być wyraźnie oznakowane PERSISTED.computed_column_expressionmusi być deterministyczny, gdy określono PERSISTED.NULL | NIEDOZWOLONE WARTOŚCI NULL
Określa, czy w kolumnadozwolone są wartości null .NULL nie jest ściśle ograniczenie, ale można określić jak NOT NULL.NIE można określić wartość NULL dla kolumny obliczanej, tylko wtedy, gdy określony jest również PERSISTED.OGRANICZENIA
Określa początek definicji klucz podstawowy lub unikatowe ograniczenie.constraint_name
To nowe ograniczenie.Warunek ograniczający nazwy muszą spełniać zasady dla identyfikatorów, z tym wyjątkiem, że nazwa nie może rozpoczynać się znakiem numeru (#).Jeśli constraint_name jest nie dostarczonych, nazwa wygenerowane przez system jest przypisana do ograniczenia.KLUCZ PODSTAWOWY
To ograniczenie wymusza obiekt integralność dla określonej kolumna lub kolumn przy użyciu indeks unikatowy.Dla każdej tabelamożna utworzyć tylko jedno ograniczenie klucza podstawowego.UNIKATOWE
To ograniczenie, które zapewnia obiekt integralność dla określonej kolumna lub kolumn przy użyciu indeks unikatowy.KLASTROWANE | NIEKLASTROWANY
Określa, że klastrowany lub ograniczenia na klucz podstawowy lub unikatowe tworzony jest indeks nieklastrowany .Domyślnie CLUSTERED ograniczeń klucza podstawowego.Domyślne ograniczenie typu UNIQUE do NONCLUSTERED.Jeśli ograniczenie klastrowany lub indeks już istnieje w tabela, nie można określić CLUSTERED.Jeśli ograniczenie klastrowany lub indeks już istnieje w tabela, domyślne ograniczenia klucza podstawowego do NONCLUSTERED.
Z FILLFACTOR =fillfactor
Określa, jak pełne Aparat baz danych programu SQL Server powinien nadać każdej strona indeksu używane do przechowywania danych indeksu.Określona przez użytkownika fillfactor możliwe wartości od 1 do 100.Jeśli wartość nie zostanie określona, domyślnie wynosi 0.Ważne:
Documenting Z FILLFACTOR = fillfactor jako jedyna opcja Indeks dotyczący ograniczenia na klucz podstawowy lub unikatowe utrzymywane w celu zapewnienia zgodności z poprzednimi wersjami, ale nie zostaną udokumentowane w ten sposób w przyszłych wydaniach.Inne opcje indeksu można określić w index_option (języka Transact-SQL) klauzula ALTER TABLE.
ODWOŁANIA DO KLUCZA OBCEGO
To ograniczenie, które zapewnia więzy integralność danych w kolumna lub kolumn.Ograniczenia klucza OBCEGO wymagają, że każda wartość w kolumna istnieje odwołanie kolumna lub kolumn w tej tabela.Ograniczenia na klucz OBCY można odwoływać się tylko te kolumny, które są ograniczenia na klucz podstawowy lub unikatowe w tej tabela lub kolumny, do których odwołuje się indeks unikatowy w tej tabela.Klucze obce na kolumny obliczane muszą również oznaczone PERSISTED.ref_table
Jest nazwą tabela odwołuje się ograniczenie klucza OBCEGO.(ref_column )
Jest kolumna z tabela odwołuje się ograniczenie klucza OBCEGO.PRZY USUWANIU { żadnej akcji | KASKADA}
Określa, jaka akcja dzieje się z wierszy w tabela , jeśli te wiersze relacji więzy i odwołanie wiersz został usunięty z tabelanadrzędnej.Wartością domyślną jest Brak akcji.BRAK AKCJI
Aparat baz danych Raises komunikat o błędzie i usuwania akcja dla wiersza w tabela nadrzędnej jest wycofywany Wstecz.KASKADA
Odpowiednie wiersze są usuwane z tabela w odwołującym się usunięcie tego wiersza z tabelanadrzędnej.
Na przykład w AdventureWorks2008R2 bazy danych, ProductVendor tabela ma relacji więzy z Vendor tabela.ProductVendor.BusinessEntityIDklucz obcy odwołania Vendor.BusinessEntityID kluczpodstawowy.
Jeśli wiersz w wykonaniu DELETE instrukcja Vendor tabelai ON DELETE CASCADE akcja określono dla ProductVendor.BusinessEntityID, Aparat baz danych sprawdza, czy jeden lub więcej wierszy zależne w ProductVendor tabela.Jeśli istnieją, zależne od wierszy w ProductVendor tabela skreśla się dodatkowo do wierszy, do których odwołuje się Vendor tabela.
I odwrotnie, jeśli brak akcji Aparat baz danych zgłasza błąd i wycofuje usuwania akcja Vendor , wiersz po co najmniej jeden wiersz w ProductVendor tabela , która odwołuje się go
Nie określaj KASKADOWO, jeśli tabela zostaną uwzględnione w korespondencji seryjnej publikacja , która wykorzystuje rekordy logiczne.Aby uzyskać więcej informacji o rekordach logiczne zobacz Zmiany do wierszy powiązanych z rekordami logiczne grupowanie.
PRZY aktualizacji { żadnej akcji }
Określa, jaka akcja dzieje się z wierszy w tabela , utworzony podczas tych wierszach jest w relacji więzy i odwołanie wiersza jest aktualizowana w tabelanadrzędnej.Jeśli nie określono żadnej akcji, Aparat baz danych zgłasza błąd i przywraca poprzednie wersje aktualizacji akcja Vendor wiersza, jeśli co najmniej jeden wiersz w ProductVendor tabela , która odwołuje się goNIE DLA REPLIKACJI
Można określić ograniczenia klucza OBCEGO i ograniczeń CHECK.Jeżeli określono tę klauzula ograniczenia, ograniczenia nie są wymuszane podczas replikacja agentów wykonać Wstaw, zaktualizować lub usunąć operacje.Aby uzyskać więcej informacji, zobacz Kontrolowanie ograniczenia, tożsamości i wyzwalaczy z nie dla replikacji.WYBORU
To ograniczenie wymusza domena integralność poprzez ograniczenie możliwych wartości, które mogą być wprowadzane do kolumna lub kolumn.Sprawdź, czy też muszą być oznakowane ograniczenia dla kolumny obliczanej PERSISTED.logical_expression
Jest logiczną wyrażenie , które zwraca wartość PRAWDA lub FAŁSZ.wyrażenie nie może zawierać odwołanie do typu danych alias .ON { partition_scheme_name(partition_column_name) | filegroup| "default"}
Określa lokalizacja przechowywania utworzyć ograniczenie indeks.Jeśli partition_scheme_name jest określony indeks jest podzielony na partycje i partycje są mapowane na aplikacjami, które zostały określone przez partition_scheme_name.Jeśli filegroup jest określony indeks zostanie utworzony w nazwie grupa plików.Jeśli "domyślną" jest określona lub jeśli w ogóle nie jest określony, indeks jest tworzony w tej samej grupa plików jako tabela.Jeśli zostanie określony na, po dodaniu indeks klastrowany dla klucza podstawowego ani ograniczenia UNIQUE, całej tabela jest przenoszony do określona grupa plików podczas tworzenia indeks klastrowany .Ostrzeżenie
W tym kontekście domyślnie nie jest słowem kluczowym.Jest to identyfikator domyślnej grupa plików i musi być rozdzielany w sprawie "domyślną" lub na domyślne[].Jeśli "domyślną" jest określona opcja QUOTED_IDENTIFIER musi być w bieżącej sesja.Jest to ustawienie domyślne.Aby uzyskać więcej informacji, zobacz ZESTAW QUOTED_IDENTIFIER (Transact-SQL).
Uwagi
Każde ograniczenie klucza podstawowego i unikatowe generuje indeks.Numer ograniczenia UNIQUE i klucza podstawowego nie może spowodować liczba indeksów w tabela , przekracza 1 indeks klastrowanyi 999 zbudowania indeksów nie klastrowanych.
Zobacz także