Delen via


ALTER TABLE column_constraint (Transact-SQL)

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

Hiermee geeft u de eigenschappen op van een PRIMAIRE SLEUTEL, REFERERENDE SLEUTEL, UNIEK of CHECK-beperking die deel uitmaakt van een nieuwe kolomdefinitie die is toegevoegd aan een tabel met behulp van ALTER TABLE.

Transact-SQL syntaxis-conventies

Syntax

Syntaxis voor SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL-database in Microsoft Fabric Preview

[ 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 )  
}  

Syntaxis voor 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

Hiermee geeft u het begin van de definitie voor een PRIMAIRE SLEUTEL, UNIEK, REFERERENDE SLEUTEL of CHECK-beperking.

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.

NULL | NIET NULL

Hiermee geeft u op of de kolom waarden kan accepteren NULL . Kolommen waarvoor geen waarden zijn toegestaan NULL , kunnen alleen worden toegevoegd als ze een standaardwaarde hebben opgegeven. Als de nieuwe kolom waarden toestaat NULL en er geen standaardwaarde is opgegeven, bevat NULL de nieuwe kolom voor elke rij in de tabel. Als de nieuwe kolom waarden toestaat NULL en er een standaarddefinitie wordt toegevoegd aan de nieuwe kolom, kan de optie WITH VALUES worden gebruikt om de standaardwaarde op te slaan in de nieuwe kolom voor elke bestaande rij in de tabel.

Als de nieuwe kolom geen waarden toestaat NULL , moet er een STANDAARDdefinitie worden toegevoegd aan de nieuwe kolom. De nieuwe kolom wordt automatisch geladen met de standaardwaarde in de nieuwe kolommen in elke bestaande rij.

Wanneer voor het toevoegen van een kolom fysieke wijzigingen in de gegevensrijen van een tabel zijn vereist, zoals het toevoegen van STANDAARDwaarden aan elke rij, worden vergrendelingen op de tabel bewaard terwijl ALTER TABLE wordt uitgevoerd. Dit is van invloed op de mogelijkheid om de inhoud van de tabel te wijzigen terwijl de vergrendeling is ingesteld. Het toevoegen van een kolom die waarden toestaat NULL en geen standaardwaarde opgeeft, is daarentegen alleen een metagegevensbewerking en er zijn geen vergrendelingen.

Wanneer u database- en sessie-instellingen gebruikt CREATE TABLE of ALTER TABLEbeïnvloedt en mogelijk de null-waarde van het gegevenstype overschrijft dat in een kolomdefinitie wordt gebruikt. U wordt aangeraden altijd expliciet niet-gecomputeerde kolommen te definiëren als NULL of NOT NULL , als u een door de gebruiker gedefinieerd gegevenstype gebruikt, zodat de kolom de standaard null-waarde van het gegevenstype kan gebruiken. Zie CREATE TABLEvoor meer informatie.

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.

In Microsoft Fabric Warehouse heeft NONCLUSTERED geen effect.

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 vulfactorwaarden kunnen tussen 1 en 100 zijn. Als er geen waarde is opgegeven, is de standaardwaarde 0.

Important

Documenteren WITH 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 standaard geen trefwoord. Het is een id voor de standaardbestandsgroep en moet worden gescheiden, zoals in ON default of ON [default]. Als de standaardwaarde is opgegeven, moet de QUOTED_IDENTIFIER optie ingeschakeld zijn voor de huidige sessie. Dit is de standaardinstelling. Zie set QUOTED_IDENTIFIER (Transact-SQL)voor meer informatie.

NOT ENFORCED

In Microsoft Fabric Warehouse, primaire sleutel, unieke sleutel en refererende sleutelbeperkingen zijn NIET AFGEDWONGEN vereist. De integriteit van de beperkingen moet door de toepassing worden gehandhaafd.

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 bestaat in de opgegeven kolom in de tabel waarnaar wordt verwezen.

schema_name
Is de naam van het schema waarnaar de tabel waarnaar wordt verwezen door de beperking REFERERENDE SLEUTEL.

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

ref_column
Is een kolom 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 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 nullable is en er geen expliciete standaardwaarde is ingesteld, NULL wordt deze 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 INSTEAD OF trigger ON DELETE bestaat in de tabel die wordt gewijzigd.

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

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

Als er echter GEEN ACTIE is opgegeven, genereert de database-engine een fout en wordt de verwijderactie in de Vendor rij teruggedraaid wanneer er ten minste één rij in de ProductVendor tabel staat waarnaar wordt verwezen.

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 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 nullable is en er geen expliciete standaardwaarde is ingesteld, NULL wordt deze 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 AdventureWorks2022-database heeft de ProductVendor tabel bijvoorbeeld een referentiële relatie met de Vendor tabel. De ProductVendor. VendorID refererende sleutel verwijst naar de Vendor. VendorID primaire sleutel.

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

Als er echter GEEN ACTIE is opgegeven, genereert de database-engine een fout en wordt de updateactie in de Vendor rij teruggedraaid wanneer er ten minste één rij in de ProductVendor tabel staat waarnaar wordt verwezen.

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.

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 CHECK worden toegevoegd, worden alle bestaande gegevens gecontroleerd op schendingen van beperkingen, tenzij de WITH NOCHECK optie 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 WITH NOCHECK optie 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 criteria voor querydeelname door 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.

Examples

Zie ALTER TABLE (Transact-SQL)voor voorbeelden.