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
Lager i Microsoft Fabric
SQL-databas i Förhandsversion av Microsoft Fabric
Anger egenskaperna för en PRIMÄRNYCKEL, UNIK, SEKUNDÄRNYCKEL, en CHECK-begränsning eller en STANDARDdefinition som läggs till i en tabell med hjälp av ALTER TABLE.
Transact-SQL syntaxkonventioner
Syntax
[ CONSTRAINT constraint_name ]
{
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
(column [ ASC | DESC ] [ ,...n ] )
[ WITH FILLFACTOR = fillfactor
[ WITH ( <index_option>[ , ...n ] ) ]
[ ON { partition_scheme_name ( partition_column_name ... )
| filegroup | "default" } ]
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CONNECTION
( { node_table TO node_table }
[ , {node_table TO node_table }]
[ , ...n ]
)
[ ON DELETE { NO ACTION | CASCADE } ]
| DEFAULT constant_expression FOR column [ WITH VALUES ]
| CHECK [ NOT FOR REPLICATION ] ( logical_expression )
}
Arguments
CONSTRAINT
Anger början av en definition för en PRIMÄRNYCKEL, UNIK, SEKUNDÄRNYCKEL, CHECK-begränsning eller STANDARD.
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 villkoret ett systemgenererat namn.
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.
column
Är en kolumn eller lista med kolumner som anges inom parenteser som används i en ny begränsning.
[ ASC | DESC ]
Anger i vilken ordning kolumnen eller kolumnerna som ingår i tabellbegränsningarna sorteras. Standardvärdet är ASC.
MED FILLFACTOR-fillfactor=
Anger hur full databasmotorn 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 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 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.
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.
referenced_table_name
Refereras tabellen till av villkoret FOREIGN KEY.
ref_column
Är en kolumn eller lista med kolumner 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 blir NULL 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.
VID BORTTAGNING AV KASKAD kan inte definieras om det redan finns en I stället för utlösare PÅ DELETE i tabellen som ändras.
I databasen har tabellen ProductVendor till exempel AdventureWorks2022 en referensrelation till tabellen Leverantör.
Sekundärnyckeln ProductVendor.VendorID refererar till primärnyckeln Vendor.VendorID.
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.VendorID, söker databasmotorn efter en eller flera beroende rader i tabellen ProductVendor . Om det finns några kommer de beroende raderna i tabellen ProductVendor att tas 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.
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 blir NULL kolumnens implicita standardvärde.
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 databasen har tabellen ProductVendor till exempel AdventureWorks2022 en referensrelation till tabellen Leverantör.
Sekundärnyckeln ProductVendor.VendorID refererar till primärnyckeln Vendor.VendorID.
Om en UPDATE-instruktion körs på en rad i tabellen Leverantör och en CASCADE-åtgärd på UPPDATERING har angetts för ProductVendor.VendorID, söker databasmotorn efter en eller flera beroende rader i tabellen ProductVendor . Om det finns någon kommer den beroende raden i tabellen ProductVendor att uppdateras samt raden som refereras till i tabellen Leverantör .
Om ingen åtgärd anges genererar databasmotorn ett fel och återställer uppdateringsåtgärden på raden Leverantör när 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.
ANSLUTNING Anger det par med nodtabeller som den angivna gränsbegränsningen tillåts ansluta till. PÅ DELETE anger vad som händer med raderna i kanttabellen när noderna som var anslutna via kanterna i den här gränstabellen tas bort.
DEFAULT
Anger standardvärdet för kolumnen. STANDARDdefinitioner kan användas för att ange värden för en ny kolumn i de befintliga dataraderna. Standarddefinitioner kan inte läggas till i kolumner som har en tidsstämpeldatatyp , en identitetsegenskap, en befintlig STANDARDdefinition eller ett bundet standardvärde. Om kolumnen har ett befintligt standardvärde måste standardvärdet tas bort innan det nya standardvärdet kan läggas till. Om ett standardvärde anges för en användardefinierad typkolumn bör typen ha stöd för en implicit konvertering från constant_expression till den användardefinierade typen. För att upprätthålla kompatibilitet med tidigare versioner av SQL Server kan ett villkorsnamn tilldelas till en DEFAULT.
constant_expression
Är ett literalvärde, en NULL eller en systemfunktion som används som standardkolumnvärde. Om constant_expression används tillsammans med en kolumn som definierats vara av användardefinierad typ av Microsoft .NET Framework måste implementeringen av typen ha stöd för en implicit konvertering från constant_expression till den användardefinierade typen.
FOR column
Anger kolumnen som är associerad med en standarddefinition på tabellnivå.
WITH VALUES
Om kolumnen tillåter NULLS med HJÄLP av WITH VALUES när du lägger till en kolumn OCH en STANDARDvillkor anger du värdet för den nya kolumnen för befintliga rader i STANDARD constant_expression.
Om kolumnen som läggs till inte tillåter NULLS, för befintliga rader, anges kolumnens värde alltid till det värde som anges i konstant uttrycket DEFAULT.
Från och med SQL Server 2012 kan detta vara en metadataåtgärd som lägger till-inte-null-columns-as-an-online-operation.
Om detta används när den relaterade kolumnen inte också läggs till har den ingen effekt.
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 såvida inte alternativet WITH NOCHECK 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 MED 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 kopplingsvillkor i frågor genom att matcha kolumnen eller kolumnerna i 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.
SQL Server 2022 (16.x) introducerar återupptabara åtgärder för att lägga till tabellbegränsningar för primärnyckel och unika nyckelbegränsningar. Mer information om hur du aktiverar och använder återanvändbara åtgärder finns ALTER TABLE ADD CONSTRAINT i Återuppta tabellbegränsningar.
Examples
Exempel finns i ALTER TABLE (Transact-SQL).