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 PRIMÄRNYCKEL, SEKUNDÄRNYCKEL, UNIK eller CHECK-begränsning som ingår i en ny kolumndefinition som läggs till i en tabell med hjälp av ALTER TABLE.
Transact-SQL syntaxkonventioner
Syntax
Syntax för SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL Database i Förhandsversion av Microsoft Fabric
[ CONSTRAINT constraint_name ]
{
[ NULL | NOT NULL ]
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = fillfactor ]
[ WITH ( index_option [, ...n ] ) ]
[ ON { partition_scheme_name (partition_column_name)
| filegroup | "default" } ]
| [ FOREIGN KEY ]
REFERENCES [ schema_name . ] referenced_table_name
[ ( ref_column ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ] ( logical_expression )
}
Syntax för Microsoft Fabric Warehouse
[ CONSTRAINT constraint_name ]
{
{ PRIMARY KEY | UNIQUE }
NONCLUSTERED
(column [ ASC | DESC ] [ ,...n ] )
NOT ENFORCED
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]
NOT ENFORCED
}
Arguments
CONSTRAINT
Anger början av definitionen för villkoret PRIMÄRNYCKEL, UNIK, SEKUNDÄRNYCKEL eller CHECK.
constraint_name
Är namnet på villkoret. 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.
NULL | INTE NULL
Anger om kolumnen kan acceptera NULL värden. Kolumner som inte tillåter NULL värden kan bara läggas till om de har ett angivet standardvärde. Om den nya kolumnen tillåter NULL värden och ingen standard har angetts NULL innehåller den nya kolumnen för varje rad i tabellen. Om den nya kolumnen tillåter NULL värden och en standarddefinition läggs till med den nya kolumnen kan alternativet WITH VALUES användas för att lagra standardvärdet i den nya kolumnen för varje befintlig rad i tabellen.
Om den nya kolumnen inte tillåter NULL värden måste en STANDARD-definition läggas till med den nya kolumnen. Den nya kolumnen läses in automatiskt med standardvärdet i de nya kolumnerna i varje befintlig rad.
När tillägg av en kolumn kräver fysiska ändringar av dataraderna i en tabell, till exempel att lägga till STANDARDvärden till varje rad, hålls låsen kvar i tabellen medan ALTER TABLE körs. Detta påverkar möjligheten att ändra innehållet i tabellen medan låset är på plats. Att lägga till en kolumn som tillåter NULL värden och inte anger ett standardvärde är däremot endast en metadataåtgärd och innebär inga lås.
När du använder CREATE TABLE eller ALTER TABLEpåverkar databas- och sessionsinställningar och eventuellt åsidosätter ogiltigheten för den datatyp som används i en kolumndefinition. Vi rekommenderar att du alltid uttryckligen definierar icke-kompatibla kolumner som NULL eller NOT NULL , om du använder en användardefinierad datatyp, att du tillåter att kolumnen använder standardvärdet nullability för datatypen. Mer information finns i CREATE TABLE.
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 angiven 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.
Kolumner som är av datatyperna ntext, text, varchar(max), nvarchar(max), varbinary(max), xml eller image kan inte anges som kolumner för ett index.
I Microsoft Fabric Warehouse har NONCLUSTERED ingen effekt.
MED FILLFACTOR =fillfactor
Anger hur full databasmotorn ska göra varje indexsida som används för att lagra indexdata. Användardefinierade fyllningsfaktorvärden kan vara mellan 1 och 100. Om inget värde anges är standardvärdet 0.
Important
Dokumentering WITH FILLFACTOR som det enda indexalternativet som gäller för PRIMÄRNYCKEL eller UNIKA begränsningar behålls för bakåtkompatibilitet, men kommer inte att dokumenteras på det här sättet i framtida versioner. Andra indexalternativ kan anges i index_option-satsen i ALTER TABLE.
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.
I det här sammanhanget är standard inte ett nyckelord. Det är en identifierare för standardfilgruppen och måste avgränsas, som i ON default eller ON [default]. Om standardvärdet 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).
NOT ENFORCED
I Microsoft Fabric Warehouse kräver primärnyckel, unik nyckel och begränsningar för sekundärnyckel INTE FRAMTVingad. Integriteten för begränsningarna måste upprätthållas av programmet.
REFERENSER FÖR SEKUNDÄRNYCKEL
Är en begränsning som ger referensintegritet för data i kolumnen. Begränsningar för SEKUNDÄRNYCKEL kräver att varje värde i kolumnen finns i den angivna kolumnen i den refererade tabellen.
schema_name
Är namnet på schemat som tabellen som refereras till av villkoret FOREIGN KEY tillhör.
referenced_table_name
Refereras tabellen till av villkoret FOREIGN KEY.
ref_column
Är en kolumn inom parenteser som refereras till av den nya foreign key-begränsningen.
VID BORTTAGNING { INGEN ÅTGÄRD | CASCADE | ANGE NULL | ANGE STANDARD }
Anger vilken åtgärd som händer med rader i tabellen som ändras, 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
SQL Server Database Engine 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.
SET NULL
Alla värden som utgör sekundärnyckeln anges till NULL när motsvarande rad i den överordnade tabellen tas bort. För att den här begränsningen ska kunna köras måste främmande nyckelkolumnerna vara nullbara.
SET DEFAULT
Alla värden som utgör sekundärnyckeln anges till deras standardvärden när motsvarande rad i den överordnade tabellen tas bort. För att den här begränsningen ska kunna köras måste alla främmande nyckelkolumner ha standarddefinitioner. Om en kolumn är nullbar och det inte finns någon explicit standardvärdeuppsättning NULL blir det implicita standardvärdet för kolumnen.
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.
ON DELETE CASCADE kan inte definieras om det redan finns en INSTEAD OF utlösare ON DELETE i tabellen som ändras.
I AdventureWorks2022-databasen har till exempel tabellen ProductVendor en referensrelation till tabellen Vendor.
ProductVendor.
VendorID sekundärnyckeln refererar till Vendor.
VendorID primärnyckel.
Om en DELETE-instruktion körs på en rad i Vendor tabellen och en ON DELETE CASCADE-åtgärd har angetts för ProductVendor.VendorID, söker databasmotorn efter en eller flera beroende rader i ProductVendor tabellen. Om det finns några kommer de beroende raderna ProductVendor i tabellen att tas bort, utöver den rad som refereras i Vendor tabellen.
Om INGEN ÅTGÄRD anges genererar databasmotorn ett fel och återställer borttagningsåtgärden Vendor på raden när det finns minst en rad i ProductVendor tabellen som refererar till den.
VID UPPDATERING { INGEN ÅTGÄRD | CASCADE | ANGE NULL | ANGE STANDARD }
Anger vilken åtgärd som händer med rader i tabellen som ändras när dessa rader har en referensrelation och den refererade raden uppdateras i den överordnade tabellen. Standardvärdet är INGEN ÅTGÄRD.
NO ACTION
Databasmotorn genererar ett fel och uppdateringsåtgärden på raden i den överordnade tabellen återställs.
CASCADE
Motsvarande rader uppdateras i referenstabellen när den raden uppdateras i den överordnade tabellen.
SET NULL
Alla värden som utgör sekundärnyckeln anges till NULL när motsvarande rad i den överordnade tabellen uppdateras. För att den här begränsningen ska kunna köras måste främmande nyckelkolumnerna vara nullbara.
SET DEFAULT
Alla värden som utgör sekundärnyckeln anges till deras standardvärden när motsvarande rad i den överordnade tabellen uppdateras. För att den här begränsningen ska kunna köras måste alla främmande nyckelkolumner ha standarddefinitioner. Om en kolumn är nullbar och det inte finns någon explicit standardvärdeuppsättning NULL blir det implicita standardvärdet för kolumnen.
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.
DET går inte att definiera OM UPDATE CASCADE, SET NULL eller SET DEFAULT inte kan definieras om det redan finns en i stället för utlösare PÅ UPPDATERING i tabellen som ändras.
I AdventureWorks2022-databasen har till exempel tabellen ProductVendor en referensrelation till tabellen Vendor.
ProductVendor.
VendorID sekundärnyckeln refererar till Vendor.
VendorID primärnyckel.
Om en UPDATE-instruktion körs på en rad i Vendor tabellen och en ON UPDATE CASCADE åtgärd har angetts för ProductVendor.VendorID, söker databasmotorn efter en eller flera beroende rader i ProductVendor tabellen. Om det finns någon kommer den beroende raden i ProductVendor tabellen att uppdateras, förutom den rad som refereras i Vendor tabellen.
Om INGEN ÅTGÄRD anges genererar databasmotorn ett fel och återställer uppdateringsåtgärden Vendor på raden när det finns minst en rad i ProductVendor tabellen 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.
logical_expression
Är ett logiskt uttryck som används i en CHECK-begränsning och returnerar TRUE eller FALSE.
logical_expression som används med CHECK-begränsningar kan inte referera till en annan tabell men kan referera till andra kolumner i samma tabell för samma rad. Uttrycket kan inte referera till en aliasdatatyp.
Remarks
När begränsningarna FOREIGN KEY eller CHECK läggs till verifieras alla befintliga data för begränsningsöverträdelser om inte WITH NOCHECK alternativet har angetts. Om några överträdelser inträffar misslyckas ALTER TABLE och ett fel returneras. När en ny PRIMÄRNYCKEL eller UNIK-begränsning läggs till i en befintlig kolumn måste data i kolumnen eller kolumnerna vara unika. Om dubblettvärden hittas misslyckas ALTER TABLE. Alternativet WITH NOCHECK har ingen effekt när PRIMÄRNYCKEL eller UNIKA begränsningar läggs till.
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. Begränsningar för sekundärnyckel genererar inte automatiskt ett index. Sekundärnyckelkolumner används dock ofta i frågekopplingsvillkor genom att matcha villkoret sekundärnyckel i en tabell med den primära eller unika nyckelkolumnen eller kolumnerna i den andra tabellen. Ett index på sekundärnyckelkolumnerna gör det möjligt för databasmotorn att snabbt hitta relaterade data i sekundärnyckeltabellen.
Examples
Exempel finns i ALTER TABLE (Transact-SQL).