Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Toepassen aan:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Warehouse in Microsoft Fabric
SQL-database in Microsoft Fabric
Gebruik ALTER TABLE om de eigenschappen van een PRIMARY KEY op te geven, UNIQUE, FOREIGN KEY, CHECK constraint of DEFAULT definitie die u aan een tabel toevoegt met behulp van ALTER TABLE (Transact-SQL).
Transact-SQL syntaxisconventies
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 PRIMARY KEY, UNIQUEof FOREIGN KEYbeperking CHECK of een DEFAULT.
beperkingsnaam
De naam van de beperking. Namen van beperkingen moeten de regels voor id's volgen, behalve dat de naam niet kan beginnen met een nummerteken (#). Als u dit niet opgeeft constraint_name, wijst het systeem een gegenereerde naam toe aan de beperking.
PRIMAIRE SLEUTEL
Een beperking waarmee entiteitsintegriteit wordt afgedwongen voor een opgegeven kolom of kolommen met behulp van een unieke index. U kunt slechts één PRIMARY KEY beperking maken voor elke tabel.
UNIQUE
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 PRIMARY KEY of UNIQUE beperking.
PRIMARY KEY beperkingen zijn standaard ingesteld op CLUSTERED.
UNIQUE beperkingen zijn standaard ingesteld op NONCLUSTERED.
Als er al een geclusterde beperking of index bestaat in een tabel, kunt u niet opgeven CLUSTERED. Als er al een geclusterde beperking of index bestaat in een tabel, PRIMARY KEY zijn de beperkingen standaard ingesteld NONCLUSTEREDop .
U kunt geen kolommen opgeven die afkomstig zijn van de ntekst, tekst, varchar(max), nvarchar(max), varbinary(max), xml of afbeeldingsgegevenstypen als kolommen voor een index.
kolom
Een kolom of lijst met kolommen die zijn opgegeven tussen haakjes die u in een nieuwe beperking gebruikt.
[ ASC | DESC ]
Hiermee geeft u de volgorde op waarin de kolom of kolommen die deelnemen aan tabelbeperkingen worden gesorteerd. De standaardvolgorde is oplopende sorteervolgorde (ASC).
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 u geen waarde opgeeft, is de standaardwaarde 0.
Voor compatibiliteit met eerdere versies is deze documentatie de WITH FILLFACTOR = <fillfactor> enige indexoptie die van toepassing is op PRIMARY KEY of UNIQUE beperkingen heeft. Deze syntaxis wordt niet gedocumenteerd in toekomstige releases. U kunt andere indexopties opgeven in de index_option component van ALTER TABLE.
ON { partition_scheme_name(partition_column_name) | bestandsgroep| "standaard" }
Applies aan: SQL Server 2008 (10.0.x) en latere versies.
Hiermee geeft u de opslaglocatie van de index die voor de beperking is gemaakt. Als u partition_scheme_name opgeeft, wordt de index gepartitioneerd en worden de partities toegewezen aan de bestandsgroepen die partition_scheme_name specificeert. Als u een bestandsgroep opgeeft, wordt de index gemaakt in de benoemde bestandsgroep. Als u 'standaard' opgeeft of als u helemaal niet opgeeft ON , wordt de index gemaakt in dezelfde bestandsgroep als de tabel. Als u opgeeft ON wanneer u een geclusterde index voor een PRIMARY KEY of UNIQUE beperking toevoegt, 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'standaard' of ON[standaard]. Als u 'standaard' opgeeft, moet de QUOTED_IDENTIFIER optie voor de huidige sessie zijn ON . Dit is de standaardinstelling.
VERWIJZINGEN NAAR REFERERENDE SLEUTELS
Een beperking die referentiële integriteit biedt voor de gegevens in de kolom.
FOREIGN KEY beperkingen vereisen dat elke waarde in de kolom aanwezig is in de opgegeven kolom in de tabel waarnaar wordt verwezen.
referenced_table_name
De tabel waarnaar wordt verwezen door de FOREIGN KEY beperking.
ref_column
Een kolom of lijst met kolommen tussen haakjes waarnaar wordt verwezen door de nieuwe FOREIGN KEY beperking.
BIJ VERWIJDEREN { GEEN ACTIE | CASCADE | SET NULL | STANDAARD INSTELLEN }
Hiermee geeft u op welke actie er gebeurt met rijen in de tabel die u wijzigt, als deze rijen een referentiële relatie hebben en u de rij waarnaar wordt verwezen uit de bovenliggende tabel verwijdert. De standaardwaarde is NO ACTION.
GEEN ACTIE
De SQL Server Database Engine genereert een fout en rolt de verwijderactie terug op de rij in de bovenliggende tabel.
CASCADE
Hiermee verwijdert u overeenkomende rijen uit de verwijzende tabel als u die rij uit de bovenliggende tabel verwijdert.
SET NULL
Hiermee stelt u alle waarden in waaruit de refererende sleutel NULL bestaat wanneer u de bijbehorende rij in de bovenliggende tabel verwijdert. Opdat deze beperking uitgevoerd kan worden, moeten de kolommen met vreemde sleutels null-waarden kunnen bevatten.
STEL STANDAARD IN
Hiermee stelt u alle waarden in die de refererende sleutel vormen op de standaardwaarden wanneer u de bijbehorende rij in de bovenliggende tabel verwijdert. 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 niet op CASCADE of de tabel is opgenomen in een samenvoegpublicatie die logische records gebruikt. Zie Groepswijzigingen in gerelateerde rijen met logische recordsvoor meer informatie over logische records.
U kunt niet definiëren ON DELETE CASCADE of er al een INSTEAD OF trigger ON DELETE bestaat in de tabel die u wijzigt.
In de AdventureWorks2025-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 u een instructie DELETE uitvoert op een rij in de tabel Vendor en een actie ON DELETE CASCADE voor ProductVendor.VendorID opgeeft, controleert de Database Engine op een of meer afhankelijke rijen in de tabel ProductVendor. Indien aanwezig, worden de afhankelijke rijen in de ProductVendor tabel verwijderd, naast de rij waarnaar in de Vendor tabel wordt verwezen.
Als u daarentegen NO ACTION opgeeft, genereert de Database Engine een fout en wordt de verwijderactie teruggedraaid op de rij Vendor wanneer er ten minste één rij in de tabel ProductVendor ernaar verwijst.
BIJWERKEN { GEEN ACTIE | CASCADE | SET NULL | STANDAARD INSTELLEN }
Hiermee geeft u op welke actie er gebeurt met rijen in de tabel die u wijzigt wanneer deze rijen een referentiële relatie hebben en u de rij waarnaar wordt verwezen in de bovenliggende tabel bijwerkt. De standaardwaarde is NO ACTION.
GEEN ACTIE
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
Hiermee stelt u alle waarden in waaruit de refererende sleutel NULL bestaat wanneer u de bijbehorende rij in de bovenliggende tabel bijwerkt. Opdat deze beperking uitgevoerd kan worden, moeten de kolommen met vreemde sleutels null-waarden kunnen bevatten.
STEL STANDAARD IN
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 dit de impliciete standaardwaarde van de kolom.
Geef niet op CASCADE of de tabel is opgenomen in een samenvoegpublicatie die logische records gebruikt. Zie Groepswijzigingen in gerelateerde rijen met logische recordsvoor meer informatie over logische records.
ON UPDATE CASCADE, SET NULLof SET DEFAULT kan niet worden gedefinieerd als er al een INSTEAD OF trigger ON UPDATE bestaat in de tabel die wordt gewijzigd.
In de AdventureWorks2025-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 u een instructie UPDATE uitvoert op een rij in de tabel Vendor en een actie ON UPDATE CASCADE voor ProductVendor.VendorID opgeeft, controleert de Database Engine op een of meer afhankelijke rijen in de tabel ProductVendor. Indien aanwezig, wordt de afhankelijke rij in de ProductVendor tabel bijgewerkt, evenals de rij waarnaar in de Vendor tabel wordt verwezen.
Als u echter NO ACTION opgeeft, genereert de Database Engine een fout en wordt de updateactie teruggedraaid op de rij Vendor wanneer er ten minste één rij in de tabel ProductVendor ernaar verwijst.
NIET VOOR REPLICATIE
Applies aan: SQL Server 2008 (10.0.x) en latere versies.
Als u deze component opgeeft voor een beperking, dwingen replicatieagenten de beperking niet af wanneer ze schrijfbewerkingen uitvoeren. U kunt deze component opgeven voor FOREIGN KEY beperkingen en CHECK beperkingen.
CONNECTION
Hiermee geeft u het paar knooppunttabellen op dat de opgegeven randbeperking verbinding mag maken.
ON DELETE geeft aan wat er gebeurt met de rijen in de randtabel wanneer de knooppunten die de rand verbindt, worden verwijderd.
DEFAULT
Hiermee geeft u de standaardwaarde voor de kolom. Gebruik DEFAULT definities om waarden op te geven voor een nieuwe kolom in de bestaande rijen met gegevens. U kunt geen definities toevoegen DEFAULT aan kolommen met een tijdstempelgegevenstype , een IDENTITY eigenschap, een bestaande DEFAULT definitie of een afhankelijke standaardwaarde. Als de kolom een bestaande standaardwaarde heeft, moet u de standaardwaarde verwijderen voordat u een nieuwe standaard kunt toevoegen. Als u een standaardwaarde opgeeft voor een door de gebruiker gedefinieerde kolom, moet het type een impliciete conversie van constant_expression naar het door de gebruiker gedefinieerde type ondersteunen. Als u compatibiliteit met eerdere versies van SQL Server wilt behouden, kunt u een beperkingsnaam toewijzen aan een DEFAULT.
constant_expression
Een letterlijke waarde, een NULLof een systeemfunctie die u gebruikt als de standaardkolomwaarde. Als u constant_expression gebruikt in combinatie met een kolom die is gedefinieerd als een door de gebruiker gedefinieerd Microsoft .NET Framework, moet de implementatie van het type ondersteuning bieden voor een impliciete conversie van het constant_expression naar het door de gebruiker gedefinieerde type.
VOOR kolom
Hiermee geeft u de kolom die is gekoppeld aan een definitie op tabelniveau DEFAULT .
MET WAARDEN
Wanneer u een kolom en een
DEFAULTbeperking toevoegt, stelt uWITH VALUES, als de kolom null-waarden toestaat, de waarde van de nieuwe kolom voor bestaande rijen in op de waarde die is opgegeven inDEFAULTconstant_expression.Als de kolom die u toevoegt null-waarden niet toestaat, wordt de waarde van de kolom voor bestaande rijen altijd ingesteld op de waarde die is opgegeven in de
DEFAULTconstante expressie.
In SQL Server 2012 en latere versies kan deze bewerking een metagegevensbewerking zijn adding-not-null-columns-as-an-online-operation.
Als u WITH VALUES de gerelateerde kolom niet ook toevoegt, heeft deze geen effect.
CHECK
Een beperking waarmee domeinintegriteit wordt afgedwongen door de mogelijke waarden te beperken die kunnen worden ingevoerd in een kolom of kolommen.
logical_expression
Een logische expressie die wordt gebruikt in een CHECK beperking die retourneert TRUE of FALSE.
logical_expression die worden gebruikt met CHECK beperkingen, kunnen niet verwijzen naar een andere tabel, maar wel verwijzen naar andere kolommen in dezelfde tabel voor dezelfde rij. De expressie kan niet verwijzen naar een aliasgegevenstype.
Remarks
Wanneer u beperkingen toevoegt FOREIGN KEY of CHECK beperkt, controleert het systeem alle bestaande gegevens op schendingen van beperkingen, tenzij u de WITH NOCHECK optie opgeeft. Als er schendingen optreden, ALTER TABLE mislukt en retourneert u een fout. Wanneer u een nieuwe PRIMARY KEY of UNIQUE beperking aan een bestaande kolom toevoegt, moeten de gegevens in de kolom of kolommen uniek zijn. Als er dubbele waarden worden gevonden, ALTER TABLE mislukt het. De WITH NOCHECK optie heeft geen effect wanneer u beperkingen toevoegt PRIMARY KEY of UNIQUE beperkt.
Met elke PRIMARY KEY beperking UNIQUE wordt een index gegenereerd. Het aantal UNIQUE indexen en PRIMARY KEY beperkingen kan niet ertoe leiden dat het aantal indexen in de tabel groter is dan 999 niet-geclusterde indexen en 1 geclusterde index. Beperkingen voor refererende sleutels genereren geen index automatisch. U gebruikt echter vaak refererende-sleutelkolommen 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.
In SQL Server 2022 (16.x) en latere versies bieden hervatbare bewerkingen ondersteuning voor het toevoegen van tabelbeperkingen voor primaire sleutels en unieke sleutelbeperkingen. Zie ALTER TABLE ADD CONSTRAINT voor meer informatie over het inschakelen en gebruiken van hervatbare bewerkingen.
Warehouse in Microsoft Fabric ondersteunt ADD of DROPPRIMARY KEY, UNIQUE en FOREIGN_KEY kolombeperkingen, maar alleen als u de optie NOT ENFORCED opgeeft. Magazijn in Microsoft Fabric blokkeert alle andere ALTER TABLE bewerkingen.
Examples
Zie ALTER TABLE (Transact-SQL) voor voorbeelden.