Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Określa właściwości obliczonej kolumny, która jest dodawana do tabeli przy użyciu funkcji ALTER TABLE.
Transact-SQL konwencje składni
Syntax
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 )
]
Arguments
column_name
To nazwa kolumny, która ma zostać zmieniona, dodana lub porzucona. column_name może mieć od 1 do 128 znaków. W przypadku nowych kolumn można pominąć column_name kolumn utworzonych przy użyciu typu danych sygnatury czasowej . Jeśli nie określono column_name dla kolumny typu danych sygnatury czasowej , zostanie użyta sygnatura czasowa nazwy.
computed_column_expression
Jest wyrażeniem definiującym wartość obliczonej kolumny. Obliczona kolumna to kolumna wirtualna, która nie jest fizycznie przechowywana w tabeli, ale jest obliczana z wyrażenia, które używa innych kolumn w tej samej tabeli. Wyrażenie musi zwracać wartość. Na przykład obliczona kolumna może mieć definicję: kosztu ceny AS * qty. Inny przykład z operatorami bitowymi: is_finalised AS is_checked | is_approved. Wyrażenie może być niekompilowaną nazwą kolumny, stałą, funkcją, zmienną i dowolną kombinacją tych połączonych przez co najmniej jeden operator. Wyrażenie nie może być warunkiem wyszukiwania, podzapytaniem ani typem danych aliasu.
Obliczone kolumny mogą być używane na listach select, klauzul WHERE, klauzul ORDER BY lub innych lokalizacjach, w których można używać wyrażeń regularnych, ale z następującymi wyjątkami:
Nie można użyć obliczonej kolumny jako definicji ograniczenia DEFAULT lub FOREIGN KEY ani definicji ograniczenia NOT NULL. Jeśli jednak obliczona wartość kolumny jest definiowana przez wyrażenie deterministyczne, a typ danych wyniku jest dozwolony w kolumnach indeksu, kolumna obliczona może być używana jako kolumna klucza w indeksie lub jako część dowolnego klucza podstawowego lub unikatowego ograniczenia.
Jeśli na przykład tabela zawiera kolumny całkowite a i b, obliczona kolumna a + b może być indeksowana, ale obliczona kolumna + DATEPART(dd, GETDATE()) nie może być indeksowana, ponieważ wartość może ulec zmianie w kolejnych wywołaniach.
Obliczona kolumna nie może być obiektem docelowym instrukcji INSERT lub UPDATE.
Note
Ponieważ każdy wiersz w tabeli może mieć różne wartości dla kolumn biorących udział w obliczonej kolumnie, obliczona kolumna może nie mieć tego samego wyniku dla każdego wiersza.
PERSISTED
Określa, że aparat bazy danych będzie fizycznie przechowywać obliczone wartości w tabeli i aktualizować wartości, gdy wszystkie inne kolumny, od których zależy obliczona kolumna, są aktualizowane. Oznaczanie obliczonej kolumny jako PERSISTED umożliwia utworzenie indeksu w obliczonej kolumnie, która jest deterministyczna, ale nie jest dokładna. Aby uzyskać więcej informacji, zobacz Indeksy w kolumnach obliczanych. Wszystkie obliczone kolumny używane jako partycjonowanie kolumn tabeli partycjonowanej muszą być jawnie oznaczone jako UTRWALONE. computed_column_expression musi być deterministyczny, gdy określono wartość PERSISTED.
NULL | NIE NULL
Określa, czy wartości null są dozwolone w kolumnie. Wartość NULL nie jest ściśle ograniczeniem, ale może być określona na przykład NOT NULL. Nie można określić wartości NULL dla obliczonych kolumn tylko wtedy, gdy określono również wartość PERSISTED.
CONSTRAINT
Określa początek definicji klucza podstawowego lub unikatowego ograniczenia.
constraint_name
Jest nowym ograniczeniem. Nazwy ograniczeń muszą być zgodne z regułami dotyczącymi identyfikatorów, z tą różnicą, że nazwa nie może zaczynać się od znaku numeru (#). Jeśli constraint_name nie zostanie podana, do ograniczenia zostanie przypisana nazwa wygenerowana przez system.
KLUCZ PODSTAWOWY
To ograniczenie wymuszające integralność jednostki dla określonej kolumny lub kolumn przy użyciu unikatowego indeksu. Dla każdej tabeli można utworzyć tylko jedno ograniczenie klucza podstawowego.
UNIQUE
Jest ograniczeniem zapewniającym integralność jednostki dla określonej kolumny lub kolumn przy użyciu unikatowego indeksu.
KLASTROWANE | NIEKLASTROWANE
Określa, że indeks klastrowany lub nieklastrowany jest tworzony dla klucza podstawowego lub unikatowego ograniczenia. Domyślne ograniczenia KLUCZA PODSTAWOWEgo do KLASTRA. Domyślnie unikatowe ograniczenia mają wartość NONCLUSTERED.
Jeśli ograniczenie klastrowane lub indeks już istnieje w tabeli, nie można określić klastra. Jeśli ograniczenie klastrowane lub indeks już istnieje w tabeli, ograniczenia KLUCZA PODSTAWOWEgo są domyślne dla WARTOŚCI NONCLUSTERED.
Z FILLFACTOR = FILLFACTOR
Określa, jak pełny aparat bazy danych programu SQL Server powinien sprawić, że każda strona indeksu będzie używana do przechowywania danych indeksu. Wartości fillfactor określone przez użytkownika mogą należeć do zakresu od 1 do 100. Jeśli wartość nie jest określona, wartość domyślna to 0.
Important
Dokumentowanie WITH FILLFACTOR = fillfactor jako jedyna opcja indeksu, która ma zastosowanie do klucza PODSTAWOWEgo lub unikatowych ograniczeń jest utrzymywana w celu zapewnienia zgodności z poprzednimi wersjami, ale nie zostanie udokumentowana w ten sposób w przyszłych wersjach. Inne opcje indeksu można określić w klauzuli index_option (Transact-SQL) ALTER TABLE.
ODWOŁANIA DO KLUCZY OBCYCH
Jest ograniczeniem zapewniającym integralność referencyjną danych w kolumnie lub kolumnach. Ograniczenia klucza obcego wymagają, aby każda wartość w kolumnie istniała w odpowiedniej, przywoływanych kolumnach lub kolumnach w tabeli, do których odwołuje się odwołanie. Ograniczenia KLUCZA OBCEgo mogą odwoływać się tylko do kolumn, które są kluczem PODSTAWOWYM lub unikatowymi ograniczeniami w tabeli lub kolumnach, do których odwołuje się odwołanie w indeksie UNIKATOWYm w tabeli, do których odwołuje się odwołanie. Klucze obce w kolumnach obliczeniowych muszą być również oznaczone jako UTRWALONE.
ref_table
Jest nazwą tabeli, do których odwołuje się ograniczenie KLUCZ OBCY.
(ref_column )
Jest kolumną z tabeli, do których odwołuje się ograniczenie KLUCZ OBCY.
PO USUNIĘCIU { BRAK AKCJI | CASCADE }
Określa, jaka akcja ma miejsce w wierszach w tabeli, jeśli te wiersze mają relację referencyjną, a przywoływany wiersz zostanie usunięty z tabeli nadrzędnej. Wartość domyślna to BRAK AKCJI.
BRAK AKCJI
Aparat bazy danych zgłasza błąd i akcja usuwania w wierszu w tabeli nadrzędnej jest cofana.
CASCADE
Odpowiednie wiersze są usuwane z tabeli odwołującej się, jeśli ten wiersz zostanie usunięty z tabeli nadrzędnej.
Na przykład w AdventureWorks2025 bazie danych tabela ProductVendor ma relację odwołania z tabelą Vendor. Klucz obcy ProductVendor.BusinessEntityID odwołuje się do klucza podstawowego Vendor.BusinessEntityID.
Jeśli instrukcja DELETE jest wykonywana w wierszu w tabeli Vendor, a dla akcji ProductVendor.BusinessEntityID określono akcję ON DELETE CASCADE, aparat bazy danych sprawdza co najmniej jeden wiersz zależny w tabeli ProductVendor. Jeśli istnieją, wiersze zależne w tabeli ProductVendor są usuwane oprócz wiersza, do którego odwołuje się tabela Vendor.
Z drugiej strony, jeśli nie określono żadnej akcji, aparat bazy danych zgłasza błąd i cofa akcję usuwania w wierszu Dostawca, gdy w tabeli ProductVendor znajduje się co najmniej jeden wiersz, który się do niego odwołuje.
Nie używaj CASCADE, jeśli tabela ma być uwzględniona w publikacji scalanej korzystającej z rekordów logicznych. Aby uzyskać więcej informacji na temat rekordów logicznych, zobacz Grupowanie zmian w powiązanych wierszach z rekordami logicznymi.
PODCZAS AKTUALIZACJI { BRAK AKCJI }
Określa, jaka akcja ma miejsce w wierszach w tabeli utworzonej, gdy te wiersze mają relację referencyjną, a przywoływany wiersz jest aktualizowany w tabeli nadrzędnej. Jeśli nie określono żadnej akcji, aparat bazy danych zgłasza błąd i cofa akcję aktualizacji w wierszu Dostawca, jeśli w tabeli ProductVendor znajduje się co najmniej jeden wiersz odwołujący się do niego.
NIE DOTYCZY REPLIKACJI
Dotyczy: SQL Server 2008 (10.0.x) i nowszych.
Można określić dla ograniczeń KLUCZA OBCEgo i ograniczeń CHECK. Jeśli ta klauzula jest określona dla ograniczenia, ograniczenie nie jest wymuszane, gdy agenci replikacji wykonują operacje wstawiania, aktualizowania lub usuwania.
CHECK
Jest ograniczeniem wymuszającym integralność domeny przez ograniczenie możliwych wartości, które można wprowadzić w kolumnie lub kolumnach. Ograniczenia CHECK dla obliczonych kolumn muszą być również oznaczone jako UTRWALONE.
logical_expression
Jest wyrażeniem logicznym, które zwraca wartość TRUE lub FALSE. Wyrażenie nie może zawierać odwołania do typu danych aliasu.
ON { partition_scheme_name(partition_column_name) | filegroup| "domyślnie"}
Dotyczy: SQL Server 2008 (10.0.x) i nowszych.
Określa lokalizację przechowywania indeksu utworzonego dla ograniczenia. Jeśli określono partition_scheme_name , indeks jest partycjonowany, a partycje są mapowane na grupy plików określone przez partition_scheme_name. Jeśli zostanie określona grupa plików , indeks zostanie utworzony w nazwie filegroup. Jeśli parametr "default" jest określony lub jeśli w ogóle nie zostanie określony, indeks zostanie utworzony w tej samej grupie plików co tabela. Jeśli parametr ON jest określony podczas dodawania indeksu klastrowanego dla klucza PODSTAWOWEgo lub unikatowego ograniczenia, cała tabela zostanie przeniesiona do określonej grupy plików podczas tworzenia klastrowanego indeksu.
Note
W tym kontekście wartość domyślna nie jest słowem kluczowym. Jest to identyfikator domyślnej grupy plików i musi być rozdzielany, tak jak ON "default" lub ON [default]. Jeśli określono wartość domyślną, opcja QUOTED_IDENTIFIER musi być włączona dla bieżącej sesji. Jest to ustawienie domyślne. Aby uzyskać więcej informacji, zobacz SET QUOTED_IDENTIFIER (Transact-SQL).
Remarks
Każdy klucz PODSTAWOWY i ograniczenie UNIKATOWE generuje indeks. Liczba ograniczeń UNIQUE i PRIMARY KEY nie może spowodować, że liczba indeksów w tabeli przekroczy 999 indeksów nieklastrowanych i 1 indeks klastrowany.
SET QUOTED_IDENTIFIER wartość musi być włączona podczas tworzenia lub zmieniania indeksów w kolumnach obliczeniowych lub widokach indeksowanych. Aby uzyskać więcej informacji, zobacz SET QUOTED_IDENTIFIER (Transact-SQL).
W usłudze Fabric SQL Database obliczane kolumny mogą być tworzone, ale zostaną pominięte z dublowania w usłudze Fabric OneLake.