column_definition (Transact-SQL)
Spécifie les propriétés d'une colonne ajoutée à une table à l'aide de ALTER TABLE.
Syntaxe
column_name [ type_schema_name. ] type_name
[
( { precision [ , scale ] | max |
[ { CONTENT | DOCUMENT } ] xml_schema_collection } )
]
[ FILESTREAM ]
[
[ CONSTRAINT constraint_name ] DEFAULT constant_expression
[ WITH VALUES ]
| IDENTITY [ (seed , increment ) ] [ NOT FOR REPLICATION ]
]
[ ROWGUIDCOL ]
[ COLLATE < collation_name > ]
[ <column_constraint> [ ...n ] ]
Arguments
column_name
Nom de la colonne à modifier, à ajouter ou à supprimer. column_name peut comporter entre 1 et 128 caractères. L'argument column_name peut être omis dans le cas de nouvelles colonnes créées avec le type de données timestamp. Si aucune valeur de column_name n'est spécifiée pour une colonne de type de données timestamp, le nom timestamp est utilisé.[ type_schema_name**.** ] type_name
Type de données de la colonne ajoutée et schéma auquel elle appartient.Valeurs possibles de type_name :
un type de données système MicrosoftSQL Server ;
un type de données d'alias basé sur un type de données système SQL Server. Les types de données d'alias doivent être créés à l'aide de CREATE TYPE avant de pouvoir être utilisés dans une définition de table ;
un type Microsoft.NET Framework défini par l'utilisateur et le schéma auquel il appartient. Un type de données .NET Framework doit être créé à l'aide de CREATE TYPE avant de pouvoir être utilisé dans une définition de table.
Si type_schema_name n'est pas spécifié, MicrosoftMoteur de base de données 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
Le 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 (Transact-SQL).max
S'applique uniquement aux types de données varchar, nvarchar et varbinary. Ceux-ci permettent de stocker 2^31 octets de données de caractères et binaires ou 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 l'est également. Si celui-ci n'est pas spécifié, CONTENT détermine le comportement par défaut.DOCUMENT
Spécifie que chaque instance du type de données xml dans column_name ne peut comprendre qu'un é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 l'est également.xml_schema_collection
S'applique uniquement au type de données xml pour l'association d'une collection de schémas XML au type. Avant d'inclure une colonne xml dans un schéma, vous devez d'abord créer celui-ci 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).Lorsque 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 valeur GUID de la colonne doit être fournie par une application lors de l'insertion de données ou par une contrainte DEFAULT qui utilise la fonction NEWID ().
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 qui indique comment utiliser la définition de colonne, consultez Mise en route du stockage FILESTREAM.
[ CONSTRAINT constraint_name ]
Spécifie le début d'une définition DEFAULT. Pour conserver la compatibilité avec les versions antérieures de SQL Server, vous pouvez affecter un nom de contrainte à une définition DEFAULT. constraint_name doit respecter les règles applicables aux identificateurs, mais le nom ne peut pas commencer par un signe dièse (#). En l'absence de constraint_name, un nom généré par le système est affecté à la définition DEFAULT.DEFAULT
Mot clé spécifiant la valeur par défaut de la colonne. Une définition DEFAULT peut servir à définir les valeurs d'une nouvelle colonne dans les lignes de données existantes. Les définitions DEFAULT ne peuvent pas être appliquées aux colonnes de type timestamp ou à celles qui possèdent une propriété IDENTITY. Si une valeur par défaut est indiquée pour une colonne de type personnalisé, ce dernier doit prendre en charge une conversion implicite de constant_expression au type de données défini par l'utilisateur.constant_expression
Valeur littérale, valeur NULL ou fonction système utilisée comme valeur par défaut de la colonne. Si cet argument est utilisé avec une colonne configurée pour être d'un type défini par l'utilisateur .NET Framework, l'implémentation du type doit prendre en charge une conversion implicite de constant_expression dans ce type.WITH VALUES
Spécifie que la valeur donnée dans DEFAULT, constant_expression, est 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 n'est pas spécifiée pour les colonnes acceptant les valeurs NULL, la valeur NULL est stockée dans la nouvelle colonne dans des lignes existantes. Si la nouvelle colonne n'accepte pas les valeurs NULL, la valeur par défaut est stockée dans des 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 normalement utilisées avec les contraintes PRIMARY KEY comme identificateur unique de ligne pour la table. La propriété IDENTITY 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. Vous ne pouvez pas utiliser le mot clé DEFAULT ni les valeurs par défaut liées 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 aucune valeur n'est spécifiée, la valeur par défaut est de (1,1). Vous ne pouvez pas modifier une colonne de table existante pour ajouter la propriété IDENTITY.
[!REMARQUE]
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 le serveur de publication dépendent de l'ordre dans lequel les lignes de la table affectée sont physiquement stockées. Les lignes pouvant être stockées différemment sur l'Abonné, la valeur de la colonne d'identité peut différer pour les mêmes lignes.
Pour désactiver la propriété IDENTITY d'une colonne en autorisant l'insertion explicite des valeurs, utilisez SET IDENTITY_INSERT.
seed
Valeur utilisée pour la première ligne chargée dans la table.increment
Valeur d'incrément ajoutée à la valeur d'identité de la ligne précédemment chargée.NOT FOR REPLICATION
Peut être spécifié pour la propriété IDENTITY. Si cette clause est spécifiée pour la propriété IDENTITY, 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. Pour plus d'informations, consultez Contrôle des contraintes, des identités et des déclencheurs avec l'option NOT FOR REPLICATION.ROWGUIDCOL
Spécifie que la colonne est une colonne d'identificateur unique global de ligne. ROWGUIDCOL peut uniquement être affecté à une colonne uniqueidentifier et une seule colonne uniqueidentifier par table peut être désignée comme colonne ROWGUIDCOL. ROWGUIDCOL ne peut pas être affecté aux colonnes de types de données définis par l'utilisateur.ROWGUIDCOL n'assure pas l'unicité des valeurs stockées dans la colonne. En outre, ROWGUIDCOL ne peut de plus générer 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 fonction NEWID sur des instructions INSERT, ou définissez la fonction NEWID par défaut pour la colonne. Pour plus d'informations, consultez NEWID (Transact-SQL) et INSERT (Transact-SQL).
COLLATE < collation_name>
Indique le classement de la colonne. Sans autre indication, le classement par défaut de la base de données est attribué à la colonne. Le nom du classement peut être un nom de classement Windows ou SQL. Pour une liste des classements et pour plus d'informations, consultez Nom de classement Windows (Transact-SQL) et Nom du classement SQL Server (Transact-SQL).La clause COLLATE peut être utilisée pour spécifier uniquement les classements des colonnes comportant les types de données char, varchar, nchar et nvarchar.
Pour plus d'informations sur la clause COLLATE, consultez COLLATE (Transact-SQL).
Notes
Si une nouvelle colonne de type uniqueidentifier est ajoutée, sa valeur par défaut peut utiliser la fonction NEWID() pour générer des valeurs d'identificateur uniques dans la nouvelle colonne, pour chaque ligne existante de la table.
Le moteur de base de données n'impose pas un ordre pour la spécification de DEFAULT, IDENTITY, ROWGUIDCOL ou de contraintes de colonne dans une définition de colonne.
Voir aussi