Delen via


ALTER TABLE table_constraint (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMagazijn in Microsoft FabricSQL-database in Microsoft Fabric Preview

Hiermee geeft u de eigenschappen van een PRIMAIRE SLEUTEL, UNIEK, REFERERENDE SLEUTEL, een CHECK-beperking of een STANDAARDdefinitie die aan een tabel wordt toegevoegd met behulp van ALTER TABLE.

Transact-SQL syntaxis-conventies

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
Hiermee geeft u het begin van een definitie voor een PRIMAIRE SLEUTEL, UNIEK, REFERERENDE SLEUTEL of CHECK-beperking, of een STANDAARDwaarde.

constraint_name
Is de naam van de beperking. Namen van beperkingen moeten voldoen aan de regels voor id's, behalve dat de naam niet kan beginnen met een nummerteken (#). Als constraint_name niet wordt opgegeven, wordt er een door het systeem gegenereerde naam toegewezen aan de beperking.

PRIMARY KEY
Is een beperking waarmee entiteitsintegriteit wordt afgedwongen voor een opgegeven kolom of kolommen met behulp van een unieke index. Er kan slechts één PRIMARY KEY-beperking worden gemaakt voor elke tabel.

UNIQUE
Is een beperking die entiteitsintegriteit biedt voor een opgegeven kolom of kolommen met behulp van een unieke index.

GECLUSTERD | NIET-GECLUSTERD
Hiermee geeft u op dat een geclusterde of niet-geclusterde index wordt gemaakt voor de beperking PRIMAIRE SLEUTEL of UNIEK. PRIMAIRE-SLEUTELbeperkingen zijn standaard ingesteld op GECLUSTERD. UNIEKE beperkingen zijn standaard ingesteld op NIET-GECLUSTERD.

Als er al een geclusterde beperking of index bestaat in een tabel, kan CLUSTERED niet worden opgegeven. Als er al een geclusterde beperking of index bestaat in een tabel, worden standaard beperkingen voor PRIMAIRE SLEUTELS ingesteld op NIET-GECLUSTERD.

Kolommen die afkomstig zijn van de ntekst, tekst, varchar(max), nvarchar(max), varbinary(max), xml of afbeeldingsgegevenstypen kunnen niet worden opgegeven als kolommen voor een index.

column
Is een kolom of lijst met kolommen die zijn opgegeven tussen haakjes die worden gebruikt in een nieuwe beperking.

[ ASC | DESC ]
Hiermee geeft u de volgorde op waarin de kolom of kolommen die deelnemen aan tabelbeperkingen worden gesorteerd. De standaardwaarde is ASC.

MET FILLFACTOR =fillfactor
Hiermee geeft u op hoe vol de database-engine elke indexpagina moet maken die wordt gebruikt om de indexgegevens op te slaan. Door de gebruiker opgegeven fillfactor waarden kunnen tussen 1 en 100 zijn. Als er geen waarde is opgegeven, is de standaardwaarde 0.

Important

Documenteren MET FILLFACTOR = fillfactor als de enige indexoptie die van toepassing is op PRIMAIRE SLEUTEL of UNIEKE beperkingen wordt gehandhaafd voor achterwaartse compatibiliteit, maar wordt niet op deze manier gedocumenteerd in toekomstige releases. Andere indexopties kunnen worden opgegeven in de index_option component van ALTER TABLE.

ON { partition_scheme_name(partition_column_name) | filegroup| "default" }
van toepassing op: SQL Server 2008 (10.0.x) en hoger.

Hiermee geeft u de opslaglocatie van de index die voor de beperking is gemaakt. Als partition_scheme_name is opgegeven, wordt de index gepartitioneerd en worden de partities toegewezen aan de bestandsgroepen die zijn opgegeven door partition_scheme_name. Als de bestandsgroep is opgegeven, wordt de index gemaakt in de benoemde bestandsgroep. Als 'standaard' is opgegeven of als ON helemaal niet is opgegeven, wordt de index gemaakt in dezelfde bestandsgroep als de tabel. Als AAN is opgegeven wanneer een geclusterde index wordt toegevoegd voor een primaire sleutel of unieke beperking, wordt de hele tabel verplaatst naar de opgegeven bestandsgroep wanneer de geclusterde index wordt gemaakt.

In deze context is de standaardwaarde geen trefwoord; het is een id voor de standaardbestandsgroep en moet worden gescheiden, zoals in ON 'default' of ON [standaard]. Als 'standaard' is opgegeven, moet de optie QUOTED_IDENTIFIER zijn ingeschakeld voor de huidige sessie. Dit is de standaardinstelling.

VERWIJZINGEN NAAR REFERERENDE SLEUTELS
Is een beperking die referentiële integriteit biedt voor de gegevens in de kolom. Beperkingen voor REFERERENDE SLEUTELS vereisen dat elke waarde in de kolom aanwezig is in de opgegeven kolom in de tabel waarnaar wordt verwezen.

referenced_table_name
Is de tabel waarnaar wordt verwezen door de beperking REFERERENDE SLEUTEL.

ref_column
Is een kolom of lijst met kolommen tussen haakjes waarnaar wordt verwezen door de nieuwe beperking REFERERENDE SLEUTEL.

BIJ VERWIJDEREN { GEEN ACTIE | CASCADE | SET NULL | STANDAARD INSTELLEN }
Hiermee geeft u op welke actie er gebeurt met rijen in de tabel die wordt gewijzigd, als deze rijen een referentiële relatie hebben en de rij waarnaar wordt verwezen uit de bovenliggende tabel wordt verwijderd. De standaardwaarde is GEEN ACTIE.

NO ACTION
De SQL Server Database Engine genereert een fout en de verwijderactie op de rij in de bovenliggende tabel wordt teruggedraaid.

CASCADE
Overeenkomende rijen worden verwijderd uit de verwijzende tabel als deze rij uit de bovenliggende tabel wordt verwijderd.

SET NULL
Alle waarden waaruit de refererende sleutel bestaat, worden ingesteld op NULL wanneer de bijbehorende rij in de bovenliggende tabel wordt verwijderd. Opdat deze beperking uitgevoerd kan worden, moeten de kolommen met vreemde sleutels null-waarden kunnen bevatten.

SET DEFAULT
Alle waarden waaruit de refererende sleutel bestaat, worden ingesteld op de standaardwaarden wanneer de bijbehorende rij in de bovenliggende tabel wordt verwijderd. Om deze beperking uit te voeren, moeten alle kolommen met buitenlandse sleutels standaarddefinities hebben. Als een kolom nullbaar is en er geen expliciete standaardwaarde is ingesteld, wordt NULL de impliciete standaardwaarde van de kolom.

Geef CASCADE niet op als de tabel wordt opgenomen in een samenvoegpublicatie die logische records gebruikt. Zie Groepswijzigingen in gerelateerde rijen met logische recordsvoor meer informatie over logische records.

ON DELETE CASCADE kan niet worden gedefinieerd als er al een IN PLAATS VAN trigger ON DELETE bestaat in de tabel die wordt gewijzigd.

In de database heeft de AdventureWorks2022 tabel ProductVendor bijvoorbeeld een referentiële relatie met de tabel Leverancier . De refererende sleutel ProductVendor.VendorID verwijst naar de primaire sleutel Vendor.VendorID .

Als een DELETE-instructie wordt uitgevoerd op een rij in de tabel Leverancier en de actie ON DELETE CASCADE is opgegeven voor ProductVendor.VendorID, controleert de database-engine op een of meer afhankelijke rijen in de tabel ProductVendor . Indien aanwezig, worden de afhankelijke rijen in de tabel ProductVendor verwijderd, naast de rij waarnaar wordt verwezen in de tabel Leverancier .

Als er echter geen actie is opgegeven, genereert de database-engine een fout en wordt de verwijderactie teruggedraaid op de rij Leverancier wanneer er ten minste één rij in de tabel ProductVendor naar deze rij verwijst.

BIJWERKEN { GEEN ACTIE | CASCADE | SET NULL | STANDAARD INSTELLEN }
Hiermee geeft u op welke actie er gebeurt met rijen in de tabel die zijn gewijzigd wanneer deze rijen een referentiële relatie hebben en de rij waarnaar wordt verwezen, wordt bijgewerkt in de bovenliggende tabel. De standaardwaarde is GEEN ACTIE.

NO ACTION
De database-engine genereert een fout en de updateactie op de rij in de bovenliggende tabel wordt teruggedraaid.

CASCADE
Overeenkomende rijen worden bijgewerkt in de verwijzende tabel wanneer die rij wordt bijgewerkt in de bovenliggende tabel.

SET NULL
Alle waarden waaruit de refererende sleutel bestaat, worden ingesteld op NULL wanneer de bijbehorende rij in de bovenliggende tabel wordt bijgewerkt. Opdat deze beperking uitgevoerd kan worden, moeten de kolommen met vreemde sleutels null-waarden kunnen bevatten.

SET DEFAULT
Alle waarden waaruit de refererende sleutel bestaat, worden ingesteld op de standaardwaarden wanneer de bijbehorende rij in de bovenliggende tabel wordt bijgewerkt. Om deze beperking uit te voeren, moeten alle kolommen met buitenlandse sleutels standaarddefinities hebben. Als een kolom nullbaar is en er geen expliciete standaardwaarde is ingesteld, wordt NULL de impliciete standaardwaarde van de kolom.

Geef CASCADE niet op als de tabel wordt opgenomen in een samenvoegpublicatie die logische records gebruikt. Zie Groepswijzigingen in gerelateerde rijen met logische recordsvoor meer informatie over logische records.

BIJ UPDATE CASCADE, SET NULL of SET DEFAULT kan niet worden gedefinieerd als er al een IN PLAATS VAN trigger ON UPDATE bestaat in de tabel die wordt gewijzigd.

In de database heeft de AdventureWorks2022 tabel ProductVendor bijvoorbeeld een referentiële relatie met de tabel Leverancier . De refererende sleutel ProductVendor.VendorID verwijst naar de primaire sleutel Vendor.VendorID .

Als een UPDATE-instructie wordt uitgevoerd op een rij in de tabel Leverancier en een ON UPDATE CASCADE-actie wordt opgegeven voor ProductVendor.VendorID, controleert de database-engine op een of meer afhankelijke rijen in de tabel ProductVendor . Indien aanwezig, wordt de afhankelijke rij in de tabel ProductVendor bijgewerkt, evenals de rij waarnaar wordt verwezen in de tabel Leverancier .

Als er echter GEEN ACTIE is opgegeven, genereert de database-engine een fout en wordt de updateactie teruggedraaid op de rij Leverancier wanneer er ten minste één rij in de tabel ProductVendor naar deze rij verwijst.

NIET VOOR REPLICATIE
van toepassing op: SQL Server 2008 (10.0.x) en hoger.

Kan worden opgegeven voor beperkingen van REFERERENDE SLEUTELS en CHECK-beperkingen. Als deze component is opgegeven voor een beperking, wordt de beperking niet afgedwongen wanneer replicatieagenten invoeg-, update- of verwijderbewerkingen uitvoeren.

CONNECTION Hiermee geeft u het paar knooppunttabellen op dat de opgegeven randbeperking verbinding mag maken. BIJ DELETE geeft u op wat er gebeurt met de rijen in de randtabel, wanneer de knooppunten die zijn verbonden via de randen in deze randtabel worden verwijderd.

DEFAULT
Hiermee geeft u de standaardwaarde voor de kolom. STANDAARDdefinities kunnen worden gebruikt om waarden op te geven voor een nieuwe kolom in de bestaande rijen met gegevens. STANDAARDdefinities kunnen niet worden toegevoegd aan kolommen met een tijdstempelgegevenstype , een ID-eigenschap, een bestaande STANDAARDdefinitie of een afhankelijke standaardwaarde. Als de kolom een bestaande standaardwaarde heeft, moet de standaardwaarde worden verwijderd voordat de nieuwe standaardwaarde kan worden toegevoegd. Als een standaardwaarde is opgegeven voor een door de gebruiker gedefinieerde kolom, moet het type een impliciete conversie van constant_expression naar het door de gebruiker gedefinieerde type ondersteunen. Om compatibiliteit met eerdere versies van SQL Server te behouden, kan een beperkingsnaam worden toegewezen aan een STANDAARD.

constant_expression
Is een letterlijke waarde, een NULL of een systeemfunctie die wordt gebruikt als de standaardkolomwaarde. Als constant_expression wordt gebruikt in combinatie met een kolom die is gedefinieerd als een door de gebruiker gedefinieerd microsoft .NET Framework-type, moet de implementatie van het type een impliciete conversie van het constant_expression naar het door de gebruiker gedefinieerde type ondersteunen.

FOR column
Hiermee geeft u de kolom die is gekoppeld aan een standaarddefinitie op tabelniveau.

WITH VALUES
Wanneer u een kolom EN een STANDAARDbeperking toevoegt, stelt u de waarde van de nieuwe kolom in op de waarde die is opgegeven in DE STANDAARD-constant_expression als de kolom NULLS toestaat met BEHULP van WITH VALUES. Als de kolom die wordt toegevoegd nullS niet toestaat, wordt voor bestaande rijen de waarde van de kolom altijd ingesteld op de waarde die is opgegeven in de expressie STANDAARDconstante. Vanaf SQL Server 2012 kan dit een metagegevensbewerking zijn met het toevoegen van niet-null-kolommen-as-an-online-bewerking. Als dit wordt gebruikt wanneer de gerelateerde kolom niet ook wordt toegevoegd, heeft deze geen effect.

CHECK
Is een beperking die domeinintegriteit afdwingt door de mogelijke waarden te beperken die kunnen worden ingevoerd in een kolom of kolommen.

logical_expression
Is een logische expressie die wordt gebruikt in een CHECK-beperking en retourneert TRUE of FALSE. logical_expression die worden gebruikt met CHECK-beperkingen, kunnen niet verwijzen naar een andere tabel, maar kunnen verwijzen naar andere kolommen in dezelfde tabel voor dezelfde rij. De expressie kan niet verwijzen naar een aliasgegevenstype.

Remarks

Wanneer de beperkingen REFERERENDE SLEUTEL of CONTROLE worden toegevoegd, worden alle bestaande gegevens gecontroleerd op schendingen van beperkingen, tenzij de optie WITH NOCHECK is opgegeven. Als er schendingen optreden, mislukt ALTER TABLE en wordt er een fout geretourneerd. Wanneer een nieuwe primaire sleutel of unieke beperking wordt toegevoegd aan een bestaande kolom, moeten de gegevens in de kolom of kolommen uniek zijn. Als er dubbele waarden worden gevonden, mislukt ALTER TABLE. De optie WITH NOCHECK heeft geen effect wanneer PRIMAIRE SLEUTEL of UNIEKE beperkingen worden toegevoegd.

Elke PRIMAIRE SLEUTEL en DE BEPERKING UNIEK genereren een index. Het aantal beperkingen voor UNIEKE en PRIMAIRE SLEUTELS kan niet leiden tot een groter aantal indexen in de tabel dan 999 niet-geclusterde indexen en 1 geclusterde index. Beperkingen voor refererende sleutels genereren geen index automatisch. Refererende-sleutelkolommen worden echter vaak gebruikt in joincriteria in query's door de kolom of kolommen in de refererende-sleutelbeperking van één tabel te koppelen aan de primaire of unieke sleutelkolom of -kolommen in de andere tabel. Met een index van de kolommen met refererende sleutels kan de database-engine snel gerelateerde gegevens vinden in de refererende-sleuteltabel.

SQL Server 2022 (16.x) introduceert hervatbare bewerkingen voor het toevoegen van tabelbeperkingen voor primaire sleutels en unieke sleutelbeperkingen. Zie Hervatbare tabelbeperkingen toevoegen voor meer informatie over het inschakelen en gebruiken van hervatbare ALTER TABLE ADD CONSTRAINT bewerkingen.

Examples

Zie ALTER TABLE (Transact-SQL)voor voorbeelden.

Next steps