Partager via


TABLE ALTER column_definition (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceEntrepôt dans Microsoft FabricBase de données SQL dans Microsoft Fabric

Spécifie les propriétés d’une colonne ajoutées à une table à l’aide de l’instruction ALTER TABLE.

Conventions de la syntaxe Transact-SQL

Syntax

column_name <data_type>  
[ FILESTREAM ]  
[ COLLATE collation_name ]   
[ NULL | NOT NULL ]  
[   
    [ CONSTRAINT constraint_name ] DEFAULT constant_expression [ WITH VALUES ]   
    | IDENTITY [ ( seed , increment ) ] [ NOT FOR REPLICATION ]   
]  
[ ROWGUIDCOL ]   
[ SPARSE ]   
[ ENCRYPTED WITH  
  ( COLUMN_ENCRYPTION_KEY = key_name ,  
      ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED } ,   
      ALGORITHM =  'AEAD_AES_256_CBC_HMAC_SHA_256'   
  ) ]  
[ MASKED WITH ( FUNCTION = ' mask_function ') ]  
[ <column_constraint> [ ...n ] ]  

<data type> ::=   
[ type_schema_name . ] type_name   
    [ ( precision [ , scale ] | max |   
        [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]   

<column_constraint> ::=   
[ CONSTRAINT constraint_name ]   
{     { 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 )   
}  

Arguments

column_name

Nom de la colonne à ajouter, modifier ou supprimer. column_name peut être composé de 1 à 128 caractères. Pour les nouvelles colonnes, créées avec un type de données d’horodatage , column_name peuvent être omises. Si aucun column_name n’est spécifié pour une colonne de type de données timestamp, le timestamp du nom est utilisé.

[ type_schema_name. ] type_name

Type de données pour la colonne ajoutée et schéma auquel elle appartient.

type_name peut être l’un des types suivants :

  • Type de données système Microsoft SQL Server

  • type de données alias dérivé d'un type de données système SQL Server. Les types de données d’alias doivent être créés à l’aide CREATE TYPE d’une définition de table avant de pouvoir les utiliser.

  • type Microsoft .NET Framework défini par l'utilisateur et schéma auquel il appartient. Un type défini par l’utilisateur .NET Framework doit être créé à l’aide CREATE TYPE d’une définition de table avant de pouvoir l’utiliser.

Si type_schema_name n’est pas spécifié, le Moteur de base de données Microsoft référence type_name dans l’ordre suivant :

  • Le type de données système SQL Server

  • Le schéma par défaut de l'utilisateur actuel dans la base de données active

  • Schéma dbo dans la base de données active.

precision
Précision du type de données spécifié. Pour plus d’informations sur les valeurs de précision valides, consultez Précision, échelle et longueur.

scale
Échelle du type de données spécifié. Pour plus d’informations sur les valeurs d’échelle valides, consultez Précision, échelle et longueur.

max
S’applique uniquement aux types de données varchar, nvarchar et varbinary. Ces (max) types de données sont utilisés pour stocker 2^31 octets de données caractères et binaires, et 2^30 octets de données Unicode.

CONTENT
Spécifie que chaque instance du type de données xml dans column_name peut comprendre plusieurs éléments de niveau supérieur. CONTENT s’applique uniquement au type de données xml et ne peut être spécifié que si xml_schema_collection est également spécifié. S’il n’est pas spécifié, CONTENT il s’agit du comportement par défaut.

DOCUMENT
Spécifie que chaque instance du type de données xml dans column_name ne peut comprendre qu’un seul élément de niveau supérieur. DOCUMENT s’applique uniquement au type de données xml et ne peut être spécifié que si xml_schema_collection est également spécifié.

xml_schema_collection
S’applique à : SQL Server 2008 (10.0.x) et ultérieur.

S’applique uniquement au type de données xml pour l’association d’une collection de schémas XML au type. Avant d’ajouter une colonne de type de données XML à un schéma, le schéma doit d’abord être créé dans la base de données à l’aide de CREATE XML SCHEMA COLLECTION.

FILESTREAM

Spécifie éventuellement l’attribut de stockage FILESTREAM pour la colonne dont le type_name est varbinary(max) .

Quand FILESTREAM est spécifié pour une colonne, la table doit également avoir une colonne avec le type de données uniqueidentifier qui a l’attribut ROWGUIDCOL. Cette colonne ne doit pas autoriser les valeurs Null et doit avoir une contrainte de colonne unique de type UNIQUE ou PRIMARY KEY. La GUID valeur de la colonne est fournie par l’application lorsque les données sont insérées ou par une contrainte DEFAULT.

La colonne ROWGUIDCOL ne peut pas être supprimée et les contraintes liées ne peuvent pas être modifiées tant qu'une colonne FILESTREAM est définie pour la table. La colonne ROWGUIDCOL peut être supprimée uniquement lorsque la dernière colonne FILESTREAM a été supprimée.

Lorsque l'attribut de stockage FILESTREAM est spécifié pour une colonne, toutes les valeurs de cette colonne sont stockées dans un conteneur de données FILESTREAM sur le système de fichiers.

Pour obtenir un exemple montrant comment utiliser la définition de colonne, consultez FILESTREAM.

COLLATE collation_name

Indique le classement de la colonne. Si l'argument n'est pas spécifié, c'est le classement par défaut de la base de données qui est affecté à la colonne. Le nom du classement peut être un nom de classement Windows ou SQL. Pour en obtenir la liste et des informations supplémentaires, consultez les articles Nom de classement Windows et Nom du classement SQL Server.

La COLLATE clause peut être utilisée pour spécifier les classements uniquement des colonnes des types de données char, varchar, nchar et nvarchar .

Pour plus d’informations sur la COLLATE clause, consultez COLLATE.

NULL | NON NULL

Détermine si NULL les valeurs sont autorisées dans la colonne. NULL n’est pas strictement une contrainte, mais peut être spécifiée comme NOT NULL.

[ CONTRAINTE constraint_name ]

Spécifie le début d’une DEFAULT définition de valeur. Pour maintenir la compatibilité avec les versions antérieures de SQL Server, un nom de contrainte peut être affecté à un DEFAULT. constraint_name devez suivre les règles pour les identificateurs, sauf que le nom ne peut pas commencer par un signe numérique (#). Si constraint_name n’est pas spécifié, un nom généré par le système est affecté à la DEFAULT définition.

DEFAULT

Mot clé spécifiant la valeur par défaut de la colonne. DEFAULT les définitions peuvent être utilisées pour fournir des valeurs pour une nouvelle colonne dans les lignes de données existantes. DEFAULT les définitions ne peuvent pas être appliquées aux colonnes d’horodatage ou aux colonnes avec une IDENTITY propriété. Si une valeur par défaut est spécifiée pour une colonne de type défini par l’utilisateur, le type doit prendre en charge une conversion implicite de constant_expression vers le type défini par l’utilisateur.

constant_expression
Est une valeur littérale, une NULLfonction système ou une fonction système utilisée comme valeur de colonne par défaut. Si elle est utilisée avec une colonne définie pour être d’un type défini par l’utilisateur .NET Framework, l’implémentation du type doit prendre en charge une conversion implicite du constant_expression vers le type défini par l’utilisateur.

AVEC VALEURS

Lors de l’ajout d’une colonne et d’une DEFAULT contrainte, si la colonne autorise NULLS, WITH VALUES définit la valeur de la nouvelle colonne sur la valeur donnée DEFAULT constant_expression pour les lignes existantes.

Si la colonne ajoutée n’autorise pas NULLS, pour les lignes existantes, la valeur de la colonne est toujours définie sur la valeur donnée dans DEFAULT constant expression.

À compter de SQL Server 2012 (11.x), il peut s’agir d’une opération de métadonnées ajoutant-not-null-columns-as-an-online-operation.

Si elle est utilisée sans que la colonne associée soit elle aussi ajoutée, elle n’a aucun effet.

Spécifie que la valeur donnée est DEFAULT constant_expression stockée dans une nouvelle colonne ajoutée aux lignes existantes. Si la colonne ajoutée accepte les valeurs NULL et que l'option WITH VALUES est spécifiée, la valeur par défaut est stockée dans la nouvelle colonne ajoutée aux lignes existantes. Si WITH VALUES elle n’est pas spécifiée pour les colonnes qui autorisent les valeurs Null, la valeur NULL est stockée dans la nouvelle colonne, dans les lignes existantes. Si la nouvelle colonne n'accepte pas les valeurs NULL, la valeur par défaut est stockée dans les nouvelles lignes, que l'option WITH VALUES soit spécifiée ou pas.

IDENTITY

Spécifie que la nouvelle colonne est une colonne d'identité. Le Moteur de base de données SQL Server fournit une valeur incrémentielle unique pour la colonne. Lorsque vous ajoutez des colonnes d'identificateur à des tables existantes, les numéros d'identité sont ajoutés aux lignes existantes de la table avec les valeurs de départ et d'incrément. L'ordre dans lequel les lignes sont mises à jour n'est pas garanti. Des numéros d'identité sont également générés pour toutes les nouvelles lignes qui sont ajoutées.

Les colonnes d’identité sont couramment utilisées avec PRIMARY KEY des contraintes pour servir d’identificateur de ligne unique pour la table. La IDENTITY propriété peut être affectée à une colonne tinyint, smallint, int, bigint, decimal(p,0) ou numeric(p,0). Une seule colonne d'identité peut être créée par table. Le DEFAULT mot clé et les valeurs par défaut liées ne peuvent pas être utilisés avec une colonne d’identité. Vous devez spécifier à la fois la valeur de départ et l'incrément ou aucune de ces valeurs. Si aucun des deux n’est spécifié, la valeur par défaut est (1,1).

Note

Vous ne pouvez pas modifier une colonne de table existante pour ajouter la IDENTITY propriété.

L'ajout d'une colonne d'identité à une table publiée n'est pas pris en charge car la réplication de la colonne vers l'Abonné peut aboutir à une non convergence. Les valeurs de la colonne d'identité sur l'Abonné dépendent de l'ordre dans lequel les lignes sont physiquement stockées dans la table affectée. Les lignes peuvent être stockées différemment sur l’Abonné ; par conséquent, la valeur de la colonne d’identité peut être différente pour les mêmes lignes.

Pour désactiver la IDENTITY propriété d’une colonne en autorisant l’insertion explicite de valeurs, utilisez SET IDENTITY_INSERT.

Graines Valeur utilisée pour la première ligne chargée dans la table.

augmentation Valeur incrémentielle ajoutée à la valeur d’identité de la ligne précédente chargée.

NON POUR LA RÉPLICATION

S’applique à : SQL Server 2008 (10.0.x) et ultérieur.

Peut être spécifié pour la IDENTITY propriété. Si cette clause est spécifiée pour la IDENTITY propriété, les valeurs ne sont pas incrémentées dans les colonnes d’identité lorsque les agents de réplication effectuent des opérations d’insertion.

ROWGUIDCOL

S’applique à : SQL Server 2008 (10.0.x) et ultérieur.

Spécifie que la colonne est une colonne d'identificateur unique global de ligne. ROWGUIDCOL ne peut être affecté qu’à une colonne uniqueidentifier , et une seule colonne uniqueidentifier par table peut être désignée comme ROWGUIDCOL colonne. ROWGUIDCOL ne peut pas être affecté aux colonnes des types de données définis par l’utilisateur.

ROWGUIDCOL n’applique pas l’unicité des valeurs stockées dans la colonne. En outre, ROWGUIDCOL ne génère pas automatiquement de valeurs pour les nouvelles lignes insérées dans la table. Pour générer des valeurs uniques pour chaque colonne, utilisez la NEWID() fonction sur INSERT les instructions ou spécifiez la NEWID() fonction comme valeur par défaut pour la colonne. Pour plus d’informations, consultez NEWID (Transact-SQL) et INSERT (Transact-SQL).

SPARSE

Indique que la nouvelle colonne est une colonne éparse. Le stockage des colonnes éparses est optimisé pour les valeurs Null. Les colonnes éparses ne peuvent pas être désignées comme NOT NULL. Pour connaître les restrictions supplémentaires et obtenir plus d’informations sur les colonnes éparses, consultez Utiliser des colonnes éparses.

<column_constraint>
Pour obtenir les définitions des arguments de contrainte de colonne, consultez column_constraint (Transact-SQL).

CRYPTÉ AVEC

Indique que les colonnes doivent être chiffrées à l’aide de la fonctionnalité Always Encrypted. ENCRYPTED WITH n’est pas prise en charge sur la base de données SQL dans Microsoft Fabric.

COLUMN_ENCRYPTION_KEY = key_name

Spécifie la clé de chiffrement de colonne. Pour plus d’informations, consultez CREATE COLUMN ENCRYPTION KEY (Transact-SQL).

ENCRYPTION_TYPE = { DÉTERMINISTE | RANDOMD }

Lechiffrement déterministe utilise une méthode qui génère toujours la même valeur chiffrée pour une valeur de texte brut donnée. L’utilisation du chiffrement déterministe permet d’effectuer des recherches à l’aide de la comparaison d’égalité, d’effectuer des regroupements et de joindre des tables à l’aide de jointures d’égalité sur la base de valeurs chiffrées, mais elle peut aussi permettre à des utilisateurs non autorisés de deviner des informations concernant les valeurs chiffrées en examinant les séquences dans la colonne chiffrée. Joindre deux tables sur des colonnes chiffrées de façon déterministe n’est possible que si les deux colonnes sont chiffrées à l’aide de la même clé de chiffrement de colonne. Le chiffrement déterministe doit utiliser un classement de colonne avec un ordre de tri binaire 2 pour les colonnes de type caractère.

Lechiffrement aléatoire utilise une méthode qui chiffre les données de manière moins prévisible. Le chiffrement aléatoire est plus sécurisé, mais il empêche tout calcul et indexation sur les colonnes chiffrées, sauf si votre instance de SQL Server prend en charge Always Encrypted avec enclaves sécurisées.

Si vous utilisez Always Encrypted (sans enclaves sécurisées), utilisez le chiffrement déterministe pour les colonnes dans lesquelles effectuer des recherches avec des paramètres ou des paramètres de regroupement, par exemple un numéro d’identification gouvernemental. Utilisez le chiffrement aléatoire, pour les données telles qu’un numéro de carte de crédit qui n’est pas regroupé avec d’autres enregistrements ou utilisés pour joindre des tables, et qui n’est pas recherché, car vous utilisez d’autres colonnes (comme un numéro de transaction) pour rechercher la ligne qui contient la colonne chiffrée d’intérêt.

Si vous utilisez Always Encrypted avec enclaves sécurisées, le chiffrement aléatoire est un type de chiffrement recommandé.

Les colonnes doivent être d’un type de données qualifié.

ALGORITHM

S’applique à : SQL Server 2016 (13.x) et versions ultérieures, SQL Database.

Doit être 'AEAD_AES_256_CBC_HMAC_SHA_256' .

Pour plus d’informations, notamment sur les contraintes de fonctionnalité, consultez Always Encrypted (moteur de base de données).

AJOUTER MASQUÉ AVEC (FUNCTION = ' mask_function ')

S’applique à : SQL Server 2016 (13.x) et versions ultérieures, SQL Database.

Spécifie un masque dynamique des données. mask_function est le nom de la fonction de masquage avec les paramètres appropriés. Les options suivantes sont disponibles :

  • default()
  • email()
  • partial()
  • random()

Pour les paramètres de fonction, consultez Masquage dynamique des données.

Remarks

Si une colonne est ajoutée ayant un type de données uniqueidentifier , elle peut être définie avec une valeur par défaut qui utilise la NEWID() fonction pour fournir les valeurs d’identificateur uniques dans la nouvelle colonne pour chaque ligne existante de la table. Pour plus d’informations, consultez NEWID (Transact-SQL).

Le moteur de base de données n’applique pas d’ordre pour spécifier DEFAULT, IDENTITY, ou ROWGUIDCOLdes contraintes de colonne dans une définition de colonne.

L’instruction ALTER TABLE échoue si l’ajout de la colonne entraîne la taille de ligne de données supérieure à 8 060 octets.

Examples

Pour obtenir des exemples, consultez ALTER TABLE (Transact-SQL).