Dela via


ÄNDRA TABELL table_constraint (Transact-SQL)

Applies to:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceWarehouse i Microsoft FabricSQL-databas i Microsoft Fabric

Använd ALTER TABLE för att ange egenskaperna för en PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK villkor eller DEFAULT definition som du lägger till i en tabell med hjälp av ALTER TABLE (Transact-SQL).

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 , , , eller CHECK -begränsning eller en DEFAULT. FOREIGN KEYUNIQUEPRIMARY KEY

begränsningsnamn

Villkorets namn. Villkorsnamn måste följa reglerna för identifierare, förutom att namnet inte kan börja med ett taltecken (#). Om du inte anger constraint_nametilldelar systemet ett genererat namn till villkoret.

PRIMÄRNYCKEL

En begränsning som framtvingar entitetsintegritet för en angiven kolumn eller kolumner med hjälp av ett unikt index. Du kan bara skapa en PRIMARY KEY begränsning för varje tabell.

UNIQUE

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 villkoret PRIMARY KEY eller UNIQUE . PRIMARY KEY villkor som standard till CLUSTERED. UNIQUE villkor som standard till NONCLUSTERED.

Om det redan finns en klustrad begränsning eller ett index i en tabell kan du inte ange CLUSTERED. Om det redan finns en klustrad begränsning eller ett index i en tabell är PRIMARY KEY begränsningarna standard .NONCLUSTERED

Du kan inte ange kolumner som är av datatyperna ntext, text, varchar(max), nvarchar(max), varbinary(max), xml eller image som kolumner för ett index.

kolumn

En kolumn eller lista med kolumner som anges i parenteser som du använder i en ny begränsning.

[ ASC | DESC ]

Anger i vilken ordning kolumnen eller kolumnerna som ingår i tabellbegränsningarna sorteras. Standardvärdet är stigande sorteringsordning (ASC).

MED FILLFACTOR = fillfactor

Anger hur fullständig 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 du inte anger något värde är 0standardvärdet .

För bakåtkompatibilitet innehåller WITH FILLFACTOR = <fillfactor> den här dokumentationen som det enda indexalternativet som gäller för PRIMARY KEY eller UNIQUE begränsningar. Den här syntaxen kommer inte att dokumenteras i framtida versioner. Du kan ange andra indexalternativ i index_option-satsen i ALTER TABLE.

PÅ { partition_scheme_name(partition_column_name) | filegroup| "standard" }

Applies to: SQL Server 2008 (10.0.x) och senare versioner.

Anger lagringsplatsen för det index som skapats för villkoret. Om du anger partition_scheme_name partitioneras indexet och partitionerna mappas till de filgrupper som partition_scheme_name anger. Om du anger filgrupp skapas indexet i den namngivna filgruppen. Om du anger "standard" eller om du inte anger ON något alls skapas indexet i samma filgrupp som tabellen. Om du anger ON när du lägger till ett grupperat index för en PRIMARY KEY eller UNIQUE -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"standard" eller ON[standard]. Om du anger "standard" måste alternativet QUOTED_IDENTIFIER vara ON för den aktuella sessionen. Det här är standardinställningen.

REFERENSER FÖR SEKUNDÄRNYCKEL

En begränsning som ger referensintegritet för data i kolumnen. FOREIGN KEY villkor kräver att varje värde i kolumnen finns i den angivna kolumnen i den refererade tabellen.

referenced_table_name

Tabellen som refereras till av villkoret FOREIGN KEY .

ref_column

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 du ändrar, om dessa rader har en referensrelation och du tar bort den refererade raden från den överordnade tabellen. Standardvärdet är NO ACTION.

INGEN HANDLING

Databasmotor för SQL Server genererar ett fel och återställer borttagningsåtgärden på raden i den överordnade tabellen.

CASCADE

Tar bort motsvarande rader från den refererande tabellen om du tar bort den raden från den överordnade tabellen.

ANGE NULL

Anger alla värden som utgör sekundärnyckeln till NULL när du tar bort motsvarande rad i den överordnade tabellen. För att den här begränsningen ska kunna köras måste främmande nyckelkolumnerna vara nullbara.

STÄLL IN STANDARD

Anger alla värden som utgör sekundärnyckeln till deras standardvärden när du tar bort motsvarande rad i den överordnade tabellen. 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 CASCADE inte om tabellen ingår i en sammanslagningspublikation som använder logiska poster. Mer information om logiska poster finns i Gruppändringar till relaterade rader med logiska poster.

Du kan inte definiera ON DELETE CASCADE om det redan finns en INSTEAD OF utlösare ON DELETE i tabellen som du ändrar.

I AdventureWorks2025-databasen har till exempel tabellen ProductVendor en referensrelation till tabellen Vendor. Den ProductVendor.VendorID sekundärnyckeln refererar till den Vendor.VendorID primära nyckeln.

Om du kör en DELETE-instruktion på en rad i tabellen Vendor och anger en ON DELETE CASCADE-åtgärd för ProductVendor.VendorID söker Database Engine efter en eller flera beroende rader i tabellen ProductVendor. Om det finns några tas de beroende raderna ProductVendor i tabellen bort, förutom den rad som refereras i Vendor tabellen.

Om du anger NO ACTION genererar Database Engine ett fel och återställer borttagningsåtgärden på raden Vendor 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 du ändrar när dessa rader har en referensrelation och du uppdaterar den refererade raden i den överordnade tabellen. Standardvärdet är NO ACTION.

INGEN HANDLING

Database Engine 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.

ANGE NULL

Anger alla värden som utgör sekundärnyckeln till NULL när du uppdaterar motsvarande rad i den överordnade tabellen. För att den här begränsningen ska kunna köras måste främmande nyckelkolumnerna vara nullbara.

STÄLL IN STANDARD

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 CASCADE inte om tabellen ingår i en sammanslagningspublikation som använder logiska poster. Mer information om logiska poster finns i Gruppändringar till relaterade rader med logiska poster.

ON UPDATE CASCADE, SET NULL, eller SET DEFAULT kan inte definieras om det redan finns en INSTEAD OF utlösare ON UPDATE i tabellen som ändras.

I AdventureWorks2025-databasen har till exempel tabellen ProductVendor en referensrelation till tabellen Vendor. Den ProductVendor.VendorID sekundärnyckeln refererar till den Vendor.VendorID primära nyckeln.

Om du kör en UPDATE-instruktion på en rad i tabellen Vendor och anger en ON UPDATE CASCADE-åtgärd för ProductVendor.VendorID söker Database Engine efter en eller flera beroende rader i tabellen ProductVendor. Om det finns några uppdateras den beroende raden i ProductVendor tabellen samt den rad som refereras i Vendor tabellen.

Om du anger NO ACTION genererar Database Engine ett fel och återställer uppdateringsåtgärden på raden Vendor när det finns minst en rad i tabellen ProductVendor som refererar till den.

INTE FÖR REPLIKERING

Applies to: SQL Server 2008 (10.0.x) och senare versioner.

Om du anger den här satsen för en begränsning framtvingar replikeringsagenterna inte villkoret när de utför skrivåtgärder. Du kan ange den här satsen för FOREIGN KEY begränsningar och CHECK begränsningar.

CONNECTION

Anger det par med nodtabeller som den angivna gränsbegränsningen tillåts ansluta till. ON DELETE anger vad som händer med raderna i gränstabellen när noderna som gränsen ansluter tas bort.

DEFAULT

Anger standardvärdet för kolumnen. Använd DEFAULT definitioner för att ange värden för en ny kolumn i befintliga datarader. Du kan inte lägga till DEFAULT definitioner i kolumner som har en tidsstämpeldatatyp , en IDENTITY egenskap, en befintlig DEFAULT definition eller ett bundet standardvärde. Om kolumnen har ett befintligt standardvärde måste du släppa standardvärdet innan du kan lägga till ett nytt standardvärde. Om du anger ett standardvärde 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 du tilldela ett villkorsnamn till en DEFAULT.

constant_expression

Ett literalvärde, en NULL, eller en systemfunktion som du använder som standardkolumnvärde. Om du använder constant_expression tillsammans med en kolumn som definierats som av en användardefinierad Microsoft .NET Framework-typ, måste implementeringen av typen ha stöd för en implicit konvertering från constant_expression till den användardefinierade typen.

FOR-kolumn

Anger kolumnen som är associerad med en definition på tabellnivå DEFAULT .

MED VÄRDEN

  • När du lägger till en kolumn och en DEFAULT begränsning, om kolumnen tillåter null-värden, anger du WITH VALUES värdet för den nya kolumnen för befintliga rader till det värde som anges i DEFAULTconstant_expression.

  • Om kolumnen som du lägger till inte tillåter nullvärden anges kolumnens värde för befintliga rader alltid till det värde som anges i konstantuttrycketDEFAULT.

I SQL Server 2012 och senare versioner kan den här åtgärden vara en metadataåtgärd adding-not-null-columns-as-an-online-operation.

Om du använder WITH VALUES när den relaterade kolumnen inte också läggs till har den ingen effekt.

CHECK

En begränsning som framtvingar domänintegritet genom att begränsa de möjliga värden som kan anges i en kolumn eller kolumner.

logical_expression

Ett logiskt uttryck som används i en CHECK begränsning som 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 du lägger till FOREIGN KEY eller CHECK begränsningar kontrollerar systemet alla befintliga data efter begränsningsöverträdelser såvida du inte anger alternativet WITH NOCHECK . Om några överträdelser inträffar misslyckas ALTER TABLE och returnerar ett fel. När du lägger till en ny PRIMARY KEY eller UNIQUE begränsning i en befintlig kolumn måste data i kolumnen eller kolumnerna vara unika. Om dubblettvärden hittas ALTER TABLE misslyckas. Alternativet WITH NOCHECK har ingen effekt när du lägger till PRIMARY KEY eller UNIQUE begränsningar.

Varje PRIMARY KEY begränsning UNIQUE genererar ett index. Antalet UNIQUE och PRIMARY KEY begränsningarna kan inte leda till att antalet index i tabellen överskrider 999 icke-grupperade index och 1 grupperat index. Begränsningar för sekundärnyckel genererar inte automatiskt ett index. Du använder dock ofta sekundärnyckelkolumner 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. Med ett index på sekundärnyckelkolumnerna kan Database Engine snabbt hitta relaterade data i sekundärnyckeltabellen.

I SQL Server 2022 (16.x) och senare versioner har återupptagandeåtgärder stöd 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.

Warehouse i Microsoft Fabric stöder ADD eller DROPPRIMARY KEY, UNIQUE och FOREIGN_KEY kolumnbegränsningar, men bara om du anger alternativet NOT ENFORCED. Lager i Microsoft Fabric blockerar alla andra ALTER TABLE åtgärder.

Examples

Exempel finns i ALTER TABLE (Transact-SQL).