Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Förhandsversion av Microsoft Fabric
Anger egenskaperna för en beräknad kolumn som läggs till i en tabell med hjälp av ALTER TABLE.
Transact-SQL syntaxkonventioner
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
Är namnet på kolumnen som ska ändras, läggas till eller tas bort. column_name kan vara mellan 1 och 128 tecken. För nya kolumner kan column_name utelämnas för kolumner som skapats med en tidsstämpeldatatyp . Om ingen column_name har angetts för en tidsstämpeldatatypskolumn används tidsstämpeln för namn.
computed_column_expression
Är ett uttryck som definierar värdet för en beräknad kolumn. En beräknad kolumn är en virtuell kolumn som inte lagras fysiskt i tabellen utan beräknas från ett uttryck som använder andra kolumner i samma tabell. Ett uttryck måste ge ett värde. En beräknad kolumn kan till exempel ha definitionen: cost AS price * qty. Ett annat exempel med bitvis operatorer: is_finalised AS-is_checked | is_approved. Uttrycket kan vara ett icke-inberäknat kolumnnamn, konstant, funktion, variabel och valfri kombination av dessa som är anslutna av en eller flera operatorer. Uttrycket kan inte vara ett sökvillkor, en underfråga eller en aliasdatatyp.
Beräknade kolumner kan användas i utvalda listor, WHERE-satser, ORDER BY-satser eller andra platser där reguljära uttryck kan användas, men med följande undantag:
En beräknad kolumn kan inte användas som en definition av villkoret STANDARD eller FOREIGN KEY eller med en definition av VILLKORET INTE NULL. Men om det beräknade kolumnvärdet definieras av ett deterministiskt uttryck och datatypen för resultatet tillåts i indexkolumner, kan en beräknad kolumn användas som en nyckelkolumn i ett index eller som en del av någon PRIMÄRNYCKEL eller UNIK begränsning.
Om tabellen till exempel har heltalskolumnerna a och b kan den beräknade kolumnen a + b indexeras, men den beräknade kolumnen + DATEPART(dd, GETDATE()) kan inte indexeras, eftersom värdet kan ändras i efterföljande anrop.
En beräknad kolumn kan inte vara målet för en INSERT- eller UPDATE-instruktion.
Note
Eftersom varje rad i en tabell kan ha olika värden för kolumner som ingår i en beräknad kolumn kanske den beräknade kolumnen inte har samma resultat för varje rad.
PERSISTED
Anger att databasmotorn fysiskt lagrar de beräknade värdena i tabellen och uppdaterar värdena när andra kolumner som den beräknade kolumnen är beroende av uppdateras. Genom att markera en beräknad kolumn som PERSISTED kan ett index skapas i en beräknad kolumn som är deterministisk, men inte exakt. Mer information finns i Index på beräknade kolumner. Alla beräknade kolumner som används som partitioneringskolumner i en partitionerad tabell måste uttryckligen markeras SOM PERSISTED. computed_column_expression måste vara deterministisk när PERSISTED anges.
NULL | INTE NULL
Anger om null-värden tillåts i kolumnen. NULL är inte strikt en begränsning, men kan anges som INTE NULL. INTE NULL kan endast anges för beräknade kolumner om PERSISTED också har angetts.
CONSTRAINT
Anger början av definitionen för en PRIMÄRNYCKEL eller UNIK-begränsning.
constraint_name
Är den nya begränsningen. Villkorsnamn måste följa reglerna för identifierare, förutom att namnet inte kan börja med ett taltecken (#). Om constraint_name inte anges tilldelas ett systemgenererat namn villkoret.
PRIMARY KEY
Är en begränsning som framtvingar entitetsintegritet för en angiven kolumn eller kolumner med hjälp av ett unikt index. Endast en primärnyckelbegränsning kan skapas för varje tabell.
UNIQUE
Är en begränsning som ger entitetsintegritet för en specifik kolumn eller kolumner med hjälp av ett unikt index.
KLUSTRAD | NONCLUSTERED
Anger att ett grupperat eller icke-grupperat index skapas för begränsningen PRIMÄRNYCKEL eller UNIK. Begränsningar för PRIMÄRNYCKEL är som standard KLUSTRADE. UNIKA begränsningar är som standard NONCLUSTERED.
Om det redan finns en klustrad begränsning eller ett index i en tabell kan inte CLUSTERED anges. Om det redan finns en klustrad begränsning eller ett index i en tabell, är PRIMARY KEY-begränsningarna som standard ICKECLUSTERED.
MED FILLFACTOR =fillfactor
Anger hur full SQL Server Database Engine ska göra varje indexsida som används för att lagra indexdata. Användardefinierade fillfactor- värden kan vara mellan 1 och 100. Om inget värde anges är standardvärdet 0.
Important
Dokumentering MED FILLFACTOR = fillfactor som det enda indexalternativet som gäller för PRIMÄRNYCKEL eller UNIKA begränsningar bibehålls för bakåtkompatibilitet, men kommer inte att dokumenteras på detta sätt i framtida versioner. Andra indexalternativ kan anges i satsen index_option (Transact-SQL) i ALTER TABLE.
REFERENSER FÖR SEKUNDÄRNYCKEL
Är en begränsning som ger referensintegritet för data i kolumnen eller kolumnerna. Begränsningar för SEKUNDÄRNYCKEL kräver att varje värde i kolumnen finns i motsvarande refererade kolumn eller kolumner i den refererade tabellen. Begränsningar för SEKUNDÄRNYCKEL kan endast referera till kolumner som är PRIMÄRNYCKEL eller UNIKA begränsningar i den refererade tabellen eller kolumnerna som refereras i ett UNIKT INDEX i den refererade tabellen. Sekundärnycklar på beräknade kolumner måste också markeras SOM PERSISTED.
ref_table
Är namnet på tabellen som refereras till av villkoret FOREIGN KEY.
(ref_column )
Är en kolumn från tabellen som refereras till av villkoret FOREIGN KEY.
VID BORTTAGNING { INGEN ÅTGÄRD | CASCADE }
Anger vilken åtgärd som händer med rader i tabellen om dessa rader har en referensrelation och den refererade raden tas bort från den överordnade tabellen. Standardvärdet är INGEN ÅTGÄRD.
NO ACTION
Databasmotorn genererar ett fel och borttagningsåtgärden på raden i den överordnade tabellen återställs.
CASCADE
Motsvarande rader tas bort från referenstabellen om den raden tas bort från den överordnade tabellen.
I databasen har tabellen ProductVendor till exempel AdventureWorks2022 en referensrelation till tabellen Leverantör. Sekundärnyckeln ProductVendor.BusinessEntityID refererar till primärnyckeln Vendor.BusinessEntityID.
Om en DELETE-instruktion körs på en rad i tabellen Leverantör och en ON DELETE CASCADE-åtgärd har angetts för ProductVendor.BusinessEntityID söker databasmotorn efter en eller flera beroende rader i tabellen ProductVendor. Om det finns några tas de beroende raderna i tabellen ProductVendor bort, utöver raden som refereras i tabellen Leverantör.
Om ingen åtgärd anges genererar databasmotorn ett fel och återställer borttagningsåtgärden på raden Leverantör när det finns minst en rad i tabellen ProductVendor som refererar till den.
Ange inte CASCADE om tabellen ska ingå i en sammanslagningspublikation som använder logiska poster. Mer information om logiska poster finns i Gruppändringar till relaterade rader med logiska poster.
VID UPPDATERING { INGEN ÅTGÄRD }
Anger vilken åtgärd som händer med rader i tabellen som skapas när dessa rader har en referensrelation och den refererade raden uppdateras i den överordnade tabellen. När INGEN ÅTGÄRD anges genererar databasmotorn ett fel och återställer uppdateringsåtgärden på raden Leverantör om det finns minst en rad i tabellen ProductVendor som refererar till den.
INTE FÖR REPLIKERING
gäller för: SQL Server 2008 (10.0.x) och senare.
Kan anges för begränsningar för FOREIGN KEY och CHECK. Om den här satsen anges för en begränsning tillämpas inte villkoret när replikeringsagenter utför åtgärder för att infoga, uppdatera eller ta bort.
CHECK
Är en begränsning som framtvingar domänintegritet genom att begränsa möjliga värden som kan anges i en kolumn eller kolumner. CHECK-begränsningar för beräknade kolumner måste också markeras SOM PERSISTED.
logical_expression
Är ett logiskt uttryck som returnerar TRUE eller FALSE. Uttrycket får inte innehålla en referens till en aliasdatatyp.
PÅ { partition_scheme_name(partition_column_name) | filegroup| "default"}
gäller för: SQL Server 2008 (10.0.x) och senare.
Anger lagringsplatsen för det index som skapats för villkoret. Om partition_scheme_name anges partitioneras indexet och partitionerna mappas till de filgrupper som anges av partition_scheme_name. Om filgrupp anges skapas indexet i den namngivna filgruppen. Om "standard" har angetts eller om ON inte har angetts alls skapas indexet i samma filgrupp som tabellen. Om ON anges när ett klustrat index läggs till för en PRIMÄRNYCKEL eller UNIK-begränsning flyttas hela tabellen till den angivna filgruppen när det klustrade indexet skapas.
Note
I det här sammanhanget är standard inte ett nyckelord. Det är en identifierare för standardfilgruppen och måste avgränsas, som i PÅ "standard" eller PÅ [standard]. Om "standard" anges måste alternativet QUOTED_IDENTIFIER vara PÅ för den aktuella sessionen. Det här är standardinställningen. Mer information finns i SET QUOTED_IDENTIFIER (Transact-SQL).
Remarks
Varje PRIMÄRNYCKEL och UNIK-begränsning genererar ett index. Antalet unika och primära nyckelbegränsningar kan inte leda till att antalet index i tabellen överskrider 999 icke-grupperade index och 1 klustrat index.
SET QUOTED_IDENTIFIER måste vara PÅ när du skapar eller ändrar index för beräknade kolumner eller indexerade vyer. Mer information finns i SET QUOTED_IDENTIFIER (Transact-SQL).
I Fabric SQL-databasen tillåts beräknade kolumner skapas, men de hoppas över från spegling till Fabric OneLake.