Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Applies to :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Warehouse dans Microsoft Fabric base de données
SQL dans Microsoft Fabric
Utilisez ALTER TABLE pour spécifier les propriétés d’un PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK ou DEFAULT définition que vous ajoutez à une table à l’aide de ALTER TABLE (Transact-SQL).
conventions de syntaxe Transact-SQL
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
Spécifie le début d’une définition pour un PRIMARY KEY, , UNIQUEou FOREIGN KEYCHECK une contrainte ou un DEFAULT.
nom_de_contrainte
Nom de la contrainte. Les noms de contraintes doivent respecter les règles pour les identificateurs, sauf que le nom ne peut pas commencer par un signe numérique (#). Si vous ne fournissez constraint_namepas, le système affecte un nom généré à la contrainte.
CLÉ PRIMAIRE
Contrainte qui applique l’intégrité de l’entité pour une colonne ou des colonnes spécifiées à l’aide d’un index unique. Vous ne pouvez créer qu’une PRIMARY KEY seule contrainte pour chaque table.
UNIQUE
Contrainte qui fournit l’intégrité de l’entité pour une colonne ou des colonnes spécifiées à l’aide d’un index unique.
CLUSTERED et NONCLUSTERED
Spécifie qu’un index cluster ou non cluster est créé pour l’ou UNIQUE la PRIMARY KEY contrainte.
PRIMARY KEY contraintes par défaut sur CLUSTERED.
UNIQUE contraintes par défaut sur NONCLUSTERED.
Si une contrainte ou un index cluster existe déjà sur une table, vous ne pouvez pas spécifier CLUSTERED. Si une contrainte ou un index cluster existe déjà sur une table, PRIMARY KEY les contraintes par défaut NONCLUSTEREDsont .
Vous ne pouvez pas spécifier de colonnes qui sont des types de données ntext, text, varchar(max), nvarchar(max), varbinary(max), xml ou image en tant que colonnes pour un index.
column
Colonne ou liste de colonnes spécifiées entre parenthèses que vous utilisez dans une nouvelle contrainte.
[ ASC | DESC ]
Indique l'ordre de tri de la ou des colonnes impliquées dans les contraintes de table. La valeur par défaut est l’ordre de tri croissant (ASC).
AVEC FILLFACTOR = fillfactor
Spécifie la façon dont le Moteur de base de données doit rendre chaque page d’index utilisée pour stocker les données d’index. Les valeurs fillfactor spécifiées par l’utilisateur doivent être comprises entre 1 et 100. Si vous ne spécifiez aucune valeur, la valeur par défaut est 0.
Pour la compatibilité descendante, cette documentation inclut WITH FILLFACTOR = <fillfactor> comme seule option d’index qui s’applique à ou UNIQUE à PRIMARY KEY des contraintes. Cette syntaxe ne sera pas documentée dans les versions ultérieures. Vous pouvez spécifier d’autres options d’index dans la clause index_option de ALTER TABLE.
ON { partition_scheme_name(partition_column_name) | groupe de fichiers | « default » }
Applies à : SQL Server 2008 (10.0.x) et versions ultérieures.
Spécifie le lieu de stockage de l'index créé pour la contrainte. Si vous spécifiez partition_scheme_name, l’index est partitionné et les partitions sont mappées aux groupes de fichiers spécifiés partition_scheme_name . Si vous spécifiez un groupe de fichiers, l’index est créé dans le groupe de fichiers nommé. Si vous spécifiez « par défaut » ou si vous ne spécifiez ON pas du tout, l’index est créé dans le même groupe de fichiers que la table. Si vous spécifiez ON quand vous ajoutez un index cluster pour une PRIMARY KEY ou UNIQUE une contrainte, la table entière est déplacée vers le groupe de fichiers spécifié lorsque l’index cluster est créé.
Dans ce contexte, la valeur par défaut n’est pas un mot clé ; il s’agit d’un identificateur pour le groupe de fichiers par défaut et doit être délimité, comme dans ON« default » ou ON[default]. Si vous spécifiez « default », l’option QUOTED_IDENTIFIER doit être ON pour la session active. Il s'agit du paramètre par défaut.
RÉFÉRENCES À CLÉ ÉTRANGÈRE
Contrainte qui fournit une intégrité référentielle pour les données de la colonne.
FOREIGN KEY les contraintes nécessitent que chaque valeur de la colonne existe dans la colonne spécifiée dans la table référencée.
referenced_table_name
Table référencée par la FOREIGN KEY contrainte.
ref_column
Colonne ou liste de colonnes entre parenthèses référencées par la nouvelle FOREIGN KEY contrainte.
ON DELETE { AUCUNE ACTION | CASCADE | SET NULL | DÉFINIR PAR DÉFAUT }
Spécifie l’action qui se produit aux lignes de la table que vous modifiez, si ces lignes ont une relation référentielle et que vous supprimez la ligne référencée de la table parente. La valeur par défaut est NO ACTION.
AUCUNE ACTION
Le Moteur de base de données SQL Server génère une erreur et restaure l’action de suppression sur la ligne de la table parente.
CASCADE
Supprime les lignes correspondantes de la table de référencement si vous supprimez cette ligne de la table parente.
SET NULL
Définit toutes les valeurs qui composent la clé NULL étrangère lorsque vous supprimez la ligne correspondante dans la table parente. Pour que cette contrainte s'applique, les colonnes clés étrangères doivent pouvoir cependant être définies sur NULL.
DÉFINIR PAR DÉFAUT
Définit toutes les valeurs qui composent la clé étrangère sur leurs valeurs par défaut lorsque vous supprimez la ligne correspondante dans la table parente. Pour que cette contrainte s'applique, les colonnes clés étrangères doivent disposer cependant de valeur par défaut. Si une colonne est nullable et qu’aucune valeur par défaut explicite n’est définie, NULL devient la valeur par défaut implicite de la colonne.
Ne spécifiez CASCADE pas si la table est incluse dans une publication de fusion qui utilise des enregistrements logiques. Pour plus d’informations sur les enregistrements logiques, consultez Regrouper les modifications apportées à des lignes connexes à l’aide d’enregistrements logiques.
Vous ne pouvez pas définir ON DELETE CASCADE si un INSTEAD OF déclencheur ON DELETE existe déjà sur la table que vous modifiez.
Par exemple, dans la base de données AdventureWorks2025, la table ProductVendor possède une relation référentielle avec la table Vendor. La clé étrangère ProductVendor.VendorID fait référence à la clé primaire Vendor.VendorID.
Si vous exécutez une instruction DELETE sur une ligne de la table Vendor et spécifiez une action ON DELETE CASCADE pour ProductVendor.VendorID, le Moteur de base de données recherche une ou plusieurs lignes dépendantes dans la table ProductVendor. S’il existe, les lignes dépendantes de la ProductVendor table sont supprimées, en plus de la ligne référencée dans la Vendor table.
À l'inverse, si vous spécifiez NO ACTION, le Moteur de base de données génère une erreur et restaure l'action de suppression sur la ligne Vendor lorsqu'il y a au moins une ligne dans la table ProductVendor qui la référence.
ON MET À JOUR { AUCUNE ACTION | CASCADE | SET NULL | DÉFINIR PAR DÉFAUT }
Spécifie l’action qui arrive aux lignes de la table que vous modifiez lorsque ces lignes ont une relation référentielle et que vous mettez à jour la ligne référencée dans la table parente. La valeur par défaut est NO ACTION.
AUCUNE ACTION
Le Moteur de base de données génère une erreur et l’action de mise à jour sur la ligne de la table parente est restaurée.
CASCADE
Les lignes correspondantes sont mises à jour dans la table de référence si la ligne de la table parent est mise à jour.
SET NULL
Définit toutes les valeurs qui composent la clé NULL étrangère lorsque vous mettez à jour la ligne correspondante dans la table parente. Pour que cette contrainte s'applique, les colonnes clés étrangères doivent pouvoir cependant être définies sur NULL.
DÉFINIR PAR DÉFAUT
Toutes les valeurs composant la clé étrangère sont définies sur leur valeur par défaut si la ligne correspondante se trouvant à l'origine dans la table parent est mise à jour. Pour que cette contrainte s'applique, les colonnes clés étrangères doivent disposer cependant de valeur par défaut. Si une colonne est nullable et qu’aucune valeur par défaut explicite n’est définie, NULL devient la valeur par défaut implicite de la colonne.
Ne spécifiez CASCADE pas si la table est incluse dans une publication de fusion qui utilise des enregistrements logiques. Pour plus d’informations sur les enregistrements logiques, consultez Regrouper les modifications apportées à des lignes connexes à l’aide d’enregistrements logiques.
ON UPDATE CASCADE, SET NULLou SET DEFAULT ne peut pas être défini si un INSTEAD OF déclencheur ON UPDATE existe déjà sur la table en cours de modification.
Par exemple, dans la base de données AdventureWorks2025, la table ProductVendor possède une relation référentielle avec la table Vendor. La clé étrangère ProductVendor.VendorID fait référence à la clé primaire Vendor.VendorID.
Si vous exécutez une instruction UPDATE sur une ligne de la table Vendor et spécifiez une action ON UPDATE CASCADE pour ProductVendor.VendorID, la Moteur de base de données recherche une ou plusieurs lignes dépendantes dans la table ProductVendor. S’il existe, la ligne dépendante de la ProductVendor table est mise à jour, ainsi que la ligne référencée dans la Vendor table.
À l'inverse, si vous spécifiez NO ACTION, le Moteur de base de données génère une erreur et restaure l'action de mise à jour sur la ligne Vendor lorsqu'il y a au moins une ligne dans la table ProductVendor qui la référence.
NON POUR LA RÉPLICATION
Applies à : SQL Server 2008 (10.0.x) et versions ultérieures.
Si vous spécifiez cette clause pour une contrainte, les agents de réplication n’appliquent pas la contrainte lorsqu’ils effectuent des opérations d’écriture. Vous pouvez spécifier cette clause pour FOREIGN KEY les contraintes et CHECK les contraintes.
CONNECTION
Spécifie la paire de tables de nœuds que la contrainte de périphérie donnée est autorisée à se connecter.
ON DELETE spécifie ce qui arrive aux lignes de la table de bord lorsque les nœuds connectés à la périphérie sont supprimés.
DEFAULT
Spécifie la valeur par défaut de la colonne. Utilisez DEFAULT des définitions pour fournir des valeurs pour une nouvelle colonne dans les lignes de données existantes. Vous ne pouvez pas ajouter DEFAULT de définitions à des colonnes qui ont un type de données timestamp , une IDENTITY propriété, une définition existante DEFAULT ou une valeur par défaut liée. Si la colonne a une valeur par défaut existante, vous devez supprimer la valeur par défaut avant de pouvoir ajouter une nouvelle valeur par défaut. Si vous spécifiez une valeur par défaut pour une colonne de type définie par l’utilisateur, le type doit prendre en charge une conversion implicite de constant_expression vers le type défini par l’utilisateur. Pour maintenir la compatibilité avec les versions antérieures de SQL Server, vous pouvez affecter un nom de contrainte à un DEFAULT.
constant_expression
Valeur littérale, une fonction système ou une NULLfonction système que vous utilisez comme valeur de colonne par défaut. Si vous utilisez constant_expression conjointement avec une colonne définie pour être d’un type défini par l’utilisateur Microsoft .NET Framework, l’implémentation du type doit prendre en charge une conversion implicite de la constant_expression vers le type défini par l’utilisateur.
COLONNE FOR
Spécifie la colonne associée à une définition au niveau DEFAULT de la table.
AVEC VALEURS
Lorsque vous ajoutez une colonne et une
DEFAULTcontrainte, si la colonne autorise les valeurs Null, l’utilisationWITH VALUESde la valeur de la nouvelle colonne pour les lignes existantes est définie sur la valeur donnée dansDEFAULTconstant_expression.Si la colonne que vous ajoutez n’autorise pas les valeurs Null, la valeur de la colonne pour les lignes existantes est toujours définie sur la valeur donnée dans l’expression
DEFAULTconstante.
Dans SQL Server 2012 et versions ultérieures, cette opération peut être une opération de métadonnées adding-not-null-columns-as-an-online-operation.
Si vous utilisez WITH VALUES lorsque la colonne associée n’est pas également ajoutée, elle n’a aucun effet.
CHECK
Contrainte qui assure l'intégrité du domaine en limitant les valeurs possibles pouvant être entrées dans une ou plusieurs colonnes.
logical_expression
Expression logique utilisée dans une CHECK contrainte qui retourne TRUE ou FALSE.
logical_expression utilisé avec CHECK des contraintes ne peut pas référencer une autre table, mais peut référencer d’autres colonnes dans la même table pour la même ligne. L’expression ne peut pas référencer un type de données alias.
Remarks
Lorsque vous ajoutez FOREIGN KEY ou CHECK contraintes, le système vérifie toutes les données existantes pour les violations de contraintes, sauf si vous spécifiez l’option WITH NOCHECK . Si des violations se produisent, ALTER TABLE échouent et retournent une erreur. Lorsque vous ajoutez une nouvelle PRIMARY KEY ou UNIQUE contrainte à une colonne existante, les données de la colonne ou des colonnes doivent être uniques. Si des valeurs en double sont trouvées, ALTER TABLE échoue. L’option WITH NOCHECK n’a aucun effet lorsque vous ajoutez PRIMARY KEY ou UNIQUE contraintes.
Chaque PRIMARY KEY contrainte UNIQUE génère un index. Le nombre et UNIQUEPRIMARY KEY les contraintes ne peuvent pas entraîner le nombre d’index sur la table à dépasser 999 index non cluster et 1 index cluster. Les contraintes de clé étrangère ne génèrent pas automatiquement un index. Toutefois, vous utilisez fréquemment des colonnes clés étrangères dans les critères de jointure dans les requêtes en correspondant à la colonne ou aux colonnes de la contrainte de clé étrangère d’une table avec la colonne ou les colonnes clés primaires ou uniques de l’autre table. Un index sur les colonnes de clé étrangère permet au Moteur de base de données de rechercher rapidement les données associées dans la table de clés étrangères.
Dans SQL Server 2022 (16.x) et versions ultérieures, les opérations pouvant être reprise prennent en charge l’ajout de contraintes de table pour les contraintes de clé primaire et de clé unique. Pour plus d’informations sur l’activation et l’utilisation d’opérations ALTER TABLE ADD CONSTRAINT pouvant être reprises, consultez Ajout de contraintes de table avec reprise.
L’entrepôt dans Microsoft Fabric prend en charge ADD ou DROPPRIMARY KEY, UNIQUE et FOREIGN_KEY contraintes de colonne, mais uniquement si vous spécifiez l’option NOT ENFORCED. L’entrepôt dans Microsoft Fabric bloque toutes les autres opérations ALTER TABLE.
Examples
Pour obtenir des exemples, consultez ALTER TABLE (Transact-SQL).