computed_column_definition (Transact-SQL)

Spécifie les propriétés d'une colonne calculée qui est ajoutée à une table à l'aide de ALTER TABLE.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQL

Syntaxe

column_name AS computed_column_expression
[ PERSISTED [ NOT NULL ] ]
[ 
    [ 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 ref_table [ ( ref_column ) ] 
        [ ON DELETE { NO ACTION | CASCADE } ] 
        [ ON UPDATE { NO ACTION } ] 
        [ NOT FOR REPLICATION ] 
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )
]

Arguments

  • column_name
    Nom de la colonne à ajouter, modifier 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 données de timestamp, le nom timestamp est utilisé.

  • computed_column_expression
    Expression définissant la valeur d'une colonne calculée. Une colonne calculée est une colonne virtuelle qui n'est pas physiquement stockée dans la table, mais traitée à partir d'une expression utilisant d'autres colonnes figurant dans la même table. Par exemple, une colonne calculée peut avoir la définition : cost AS price * qty. L'expression peut être un nom de colonne non calculée, une constante, une fonction, une variable et toute combinaison de ces éléments reliés par un ou plusieurs opérateurs. L'expression ne peut pas être une sous-requête ou comporter un type de données d'alias.

    Les colonnes calculées peuvent être utilisées dans les listes de sélections, dans les clauses WHERE ou ORDER BY ou chaque fois qu'une expression régulière peut être utilisée, à l'exception des cas suivants :

    • Une colonne calculée ne peut pas être utilisée en tant que définition de contrainte DEFAULT ou FOREIGN KEY ou avec une définition de contrainte NOT NULL. Toutefois, si sa valeur est définie par une expression déterministe et que le type de données du résultat est autorisé dans les colonnes d'index, elle peut être utilisée en tant que colonne clé dans un index ou composante d'une contrainte PRIMARY KEY ou UNIQUE quelconque.

      Par exemple, si la table possède les colonnes d'entiers a et b, la colonne calculée a + b peut être indexée, contrairement à la colonne calculée a + DATEPART(dd, GETDATE()) dont la valeur est susceptible d'évoluer au fil des appels.

    • Une colonne calculée ne peut pas être la cible d'une instruction INSERT ou UPDATE.

      [!REMARQUE]

      Chaque ligne dans une table pouvant avoir des valeurs différentes pour les colonnes impliquées dans la colonne calculée, il est possible que la colonne calculée n'ait pas le même résultat pour chaque ligne.

  • PERSISTED
    Spécifie que le Moteur de base de données stockera physiquement les valeurs calculées dans la table et qu'il les mettra à jour lorsque les autres colonnes dont dépend la colonne calculée seront actualisées. Le marquage d'une colonne calculée comme PERSISTED permet de créer un index sur une colonne calculée déterministe, mais pas précise. Pour plus d'informations, consultez Index sur les colonnes calculées. Les colonnes calculées utilisées comme colonnes de partitionnement d'une table partitionnée doivent être marquées comme PERSISTED. computed_column_expression doit être déterministe lorsque PERSISTED est spécifié.

  • NULL | NOT NULL
    Indique si les valeurs NULL sont autorisées dans la colonne. NULL n'est pas strictement une contrainte, mais peut être spécifié comme NOT NULL. NOT NULL ne peut être spécifié pour des colonnes calculées que si PERSISTED est également spécifié.

  • CONSTRAINT
    Spécifie le début de la définition d'une contrainte PRIMARY KEY ou UNIQUE.

  • constraint_name
    Nouvelle contrainte. Les noms de contrainte doivent suivre les règles des identificateurs, excepté le fait que 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 contrainte.

  • PRIMARY KEY
    Contrainte assurant l'intégrité de l'entité d'une colonne ou de plusieurs colonnes données au moyen d'un seul index. Une seule contrainte PRIMARY KEY peut être créée par table.

  • UNIQUE
    Contrainte assurant l'intégrité de l'entité d'une colonne ou de plusieurs colonnes spécifiques à l'aide d'un seul index.

  • CLUSTERED et NONCLUSTERED
    Spécifie qu'un index, cluster ou non-cluster, est créé pour la contrainte PRIMARY KEY ou UNIQUE. La valeur par défaut des contraintes PRIMARY KEY est CLUSTERED. La valeur par défaut des contraintes UNIQUE est, elle, NONCLUSTERED.

    Si une contrainte ou un index cluster existe déjà pour la table, vous ne pouvez pas spécifier CLUSTERED. Dans ce cas, l'option par défaut d'une contrainte PRIMARY KEY devient NONCLUSTERED.

  • WITH FILLFACTOR =fillfactor
    Spécifie le remplissage par le Moteur de base de données SQL Server des pages d'index utilisées pour stocker les données d'index. Les valeurs fillfactor spécifiées par l'utilisateur doivent être comprises entre 1 et 100. Si aucune valeur n'est spécifiée, la valeur par défaut est 0.

    Important

    Dans la documentation, l'indication que WITH FILLFACTOR = fillfactor constitue l'unique option d'indexation s'appliquant aux contraintes PRIMARY KEY ou UNIQUE est maintenue dans un but de compatibilité avec les versions précédentes, mais elle ne sera plus indiquée ainsi dans les versions à venir. D'autres options d'index peuvent être spécifiées dans la clause index_option (Transact-SQL) de ALTER TABLE.

  • FOREIGN KEY REFERENCES
    Contrainte qui assure l'intégrité référentielle des données des colonnes. Avec les contraintes FOREIGN KEY, il faut que chaque valeur de la colonne existe dans la ou les colonnes référencées correspondantes de la table référencée. Les contraintes FOREIGN KEY ne peuvent référencer que des colonnes qui sont des contraintes PRIMARY KEY ou UNIQUE dans la table référencée ou des colonnes référencées dans un UNIQUE INDEX sur la table référencée. Les clés étrangères des colonnes calculées doivent également être marquées comme PERSISTED.

  • ref_table
    Nom de la table référencée par la contrainte FOREIGN KEY.

  • (ref_column )
    Colonne de la table référencée par la contrainte FOREIGN KEY.

  • ON DELETE { NO ACTION | CASCADE }
    Spécifie l'action qui se produit dans les lignes de la table, si ces lignes comportent une relation référentielle et que la ligne référencée est supprimée de la table parente. La valeur par défaut est NO ACTION.

    • NO ACTION
      Le Moteur de base de données déclenche une erreur et la suppression de la ligne dans la table parente est restaurée.

    • CASCADE
      Les lignes correspondantes sont supprimées de la table de référence pour celles supprimées de la table parent.

    Par exemple, dans la base de données AdventureWorks2012 , la table ProductVendor possède une relation référentielle avec la table Vendor. La clé étrangère ProductVendor.BusinessEntityID fait référence à la clé primaire Vendor.BusinessEntityID.

    Si une instruction DELETE est exécutée sur une ligne de la table Vendor et qu'une action ON DELETE CASCADE est spécifiée pour ProductVendor.BusinessEntityID, le Moteur de base de données vérifie la présence de lignes dépendantes dans la table ProductVendor. S'il existe des lignes dépendantes dans la table ProductVendor, celles-ci sont supprimées, outre la ligne référencée dans la table Vendor.

    En revanche, si la valeur NO ACTION est spécifiée, le Moteur de base de données génère une erreur et restaure l'action de suppression sur la ligne Vendor si au moins une ligne de la table ProductVendor y fait référence.

    Ne spécifiez pas CASCADE 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 { NO ACTION }
    Spécifie l'action qui se produit dans les lignes de la table créée lorsque ces lignes comportent une relation référentielle et que la ligne référencée est mise à jour dans la table parente. Lorsque la valeur NO ACTION est spécifiée, le Moteur de base de données génère une erreur et restaure l'action de mise à jour sur la ligne Vendor si au moins une ligne y fait référence dans la table ProductVendor.

  • NOT FOR REPLICATION
    Peut être indiqué aussi bien pour les contraintes FOREIGN KEY que CHECK. Si cette clause est spécifiée pour une contrainte, la contrainte n'est pas appliquée lorsque les agents de réplication effectuent des opérations d'insertion, de mise à jour ou de suppression.

  • CHECK
    Contrainte qui assure l'intégrité du domaine en limitant les valeurs possibles pouvant être entrées dans une ou plusieurs colonnes. Les contraintes CHECK des colonnes calculées doivent également être marquées comme PERSISTED.

  • logical_expression
    Expression logique qui retourne TRUE ou FALSE. L'expression ne peut pas contenir une référence à un type de données d'alias.

  • ON { partition_scheme_name(partition_column_name) | filegroup| "default"}
    Spécifie le lieu de stockage de l'index créé pour la contrainte. Si partition_scheme_name est précisé, l'index est partitionné et les partitions qui en découlent sont mappées aux groupes de fichiers indiqués par partition_scheme_name. Si filegroup est spécifié, l'index est créé dans le groupe de fichiers désigné. Si "default" est indiqué ou si l'option ON n'est pas du tout spécifiée, l'index est créé dans le même groupe de fichiers que celui de la table. Si l'option ON est spécifiée lorsqu'un index cluster est créé pour une contrainte PRIMARY KEY ou UNIQUE, la table dans son intégralité est placée dans le groupe de fichiers spécifié lorsque l'index cluster est créé.

    [!REMARQUE]

    Dans ce contexte, « default » n'est pas un mot clé. Il s'agit d'un identificateur du groupe de fichiers par défaut et il doit être délimité, comme dans l'expression ON "default" ou ON [default]. Si "default" est spécifié, l'option QUOTED_IDENTIFIER doit être activée (ON) pour la session active. Il s'agit du paramètre par défaut. Pour plus d'informations, consultez SET QUOTED_IDENTIFIER (Transact-SQL).

Notes

Chaque contrainte PRIMARY KEY et UNIQUE génère un index. Quel que soit le nombre de contraintes UNIQUE et PRIMARY KEY, le nombre d'index sur la table ne peut en aucun cas dépasser 999 index non-cluster et 1 index cluster.

Voir aussi

Référence

ALTER TABLE (Transact-SQL)