CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database nonAzure SQL Data Warehouse nonParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Crée une table dans SQL ServerSQL Server et Azure SQL DatabaseAzure SQL Database.Creates a new table in SQL ServerSQL Server and Azure SQL DatabaseAzure SQL Database.

Notes

Pour en savoir plus sur la syntaxe de SQL Data WarehouseSQL Data Warehouse, consultez CREATE TABLE (Azure SQL Data Warehouse).For SQL Data WarehouseSQL Data Warehouse syntax, see CREATE TABLE (Azure SQL Data Warehouse).

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

Syntaxe simpleSimple Syntax

--Simple CREATE TABLE Syntax (common if not using options)
CREATE TABLE
    { database_name.schema_name.table_name. | schema_name.table_name | table_name }
    ( { <column_definition> } [ ,...n ] )
[ ; ]

Syntaxe complèteFull Syntax

--Disk-Based CREATE TABLE Syntax
CREATE TABLE
    { database_name.schema_name.table_name | schema_name.table_name | table_name }
    [ AS FileTable ]
    ( {   <column_definition>
        | <computed_column_definition>
        | <column_set_definition>
        | [ <table_constraint> ] [ ,... n ]
        | [ <table_index> ] }
          [ ,...n ]
          [ PERIOD FOR SYSTEM_TIME ( system_start_time_column_name
             , system_end_time_column_name ) ]
      )
    [ ON { partition_scheme_name ( partition_column_name )
           | filegroup
           | "default" } ]
    [ TEXTIMAGE_ON { filegroup | "default" } ]
    [ FILESTREAM_ON { partition_scheme_name
           | filegroup
           | "default" } ]
    [ WITH ( <table_option> [ ,...n ] ) ]
[ ; ]
  
<column_definition> ::=
column_name <data_type>
    [ FILESTREAM ]
    [ COLLATE collation_name ]
    [ SPARSE ]
    [ MASKED WITH ( FUNCTION = ' mask_function ') ]
    [ CONSTRAINT constraint_name [ DEFAULT constant_expression ] ]
    [ IDENTITY [ ( seed,increment ) ]
    [ NOT FOR REPLICATION ]
    [ GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] ]
    [ NULL | NOT NULL ]
    [ ROWGUIDCOL ]
    [ ENCRYPTED WITH
        ( COLUMN_ENCRYPTION_KEY = key_name ,
          ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED } ,
          ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
        ) ]
    [ <column_constraint> [, ...n ] ]
    [ <column_index> ]
  
<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 )
}
  
<column_index> ::=
 INDEX index_name [ CLUSTERED | NONCLUSTERED ]
    [ WITH ( <index_option> [ ,... n ] ) ]
    [ ON { partition_scheme_name (column_name )
         | filegroup_name
         | default
         }
    ]
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
  
<computed_column_definition> ::=
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 referenced_table_name [ ( ref_column ) ]
        [ ON DELETE { NO ACTION | CASCADE } ]
        [ ON UPDATE { NO ACTION } ]
        [ NOT FOR REPLICATION ]
  
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )
]
  
<column_set_definition> ::=
column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
  
< table_constraint > ::=
[ 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 ]
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )

< table_index > ::=
{  
    {  
      INDEX index_name [ CLUSTERED | NONCLUSTERED ]
         (column_name [ ASC | DESC ] [ ,... n ] )
    | INDEX index_name CLUSTERED COLUMNSTORE
    | INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )
    }
    [ WITH ( <index_option> [ ,... n ] ) ]
    [ ON { partition_scheme_name (column_name )
         | filegroup_name
         | default
         }
    ]
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
  
}

<table_option> ::=
{  
    [DATA_COMPRESSION = { NONE | ROW | PAGE }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }
      [ , ...n ] ) ]]
    [ FILETABLE_DIRECTORY = <directory_name> ]
    [ FILETABLE_COLLATE_FILENAME = { <collation_name> | database_default } ]
    [ FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = <constraint_name> ]
    [ FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = <constraint_name> ]
    [ FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = <constraint_name> ]
    [ SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name . history_table_name
        [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ] ]
    [ REMOTE_DATA_ARCHIVE =
      {
          ON [ ( <table_stretch_options> [,...n] ) ]
        | OFF ( MIGRATION_STATE = PAUSED )
      }
    ]
}
  
<table_stretch_options> ::=
{  
    [ FILTER_PREDICATE = { null | table_predicate_function } , ]
      MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }
 }
  
<index_option> ::=
{
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | STATISTICS_INCREMENTAL = { ON | OFF }
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF }
  | COMPRESSION_DELAY= {0 | delay [Minutes]}
  | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
       [ ON PARTITIONS ( { <partition_number_expression> | <range> }
       [ , ...n ] ) ]
}
<range> ::=
<partition_number_expression> TO <partition_number_expression>
--Memory optimized CREATE TABLE Syntax
CREATE TABLE
    { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( { <column_definition>
    | [ <table_constraint> ] [ ,... n ]
    | [ <table_index> ]
      [ ,... n ] }
      [ PERIOD FOR SYSTEM_TIME ( system_start_time_column_name
        , system_end_time_column_name ) ]
)
    [ WITH ( <table_option> [ ,... n ] ) ]
 [ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] ]
    [ NULL | NOT NULL ]
[
    [ CONSTRAINT constraint_name ] DEFAULT memory_optimized_constant_expression ]
    | [ IDENTITY [ ( 1, 1 ) ]
]
    [ <column_constraint> ]
    [ <column_index> ]
  
<data_type> ::=
 [type_schema_name . ] type_name [ (precision [ , scale ]) ]

<column_constraint> ::=
 [ CONSTRAINT constraint_name ]
{
  { PRIMARY KEY | UNIQUE }
      {   NONCLUSTERED
        | NONCLUSTERED HASH WITH (BUCKET_COUNT = bucket_count)
      }
  | [ FOREIGN KEY ]
        REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]
  | CHECK ( logical_expression )
}
  
< table_constraint > ::=
 [ CONSTRAINT constraint_name ]
{
   { PRIMARY KEY | UNIQUE }
     {
       NONCLUSTERED (column [ ASC | DESC ] [ ,... n ])
       | NONCLUSTERED HASH (column [ ,... n ] ) WITH ( BUCKET_COUNT = bucket_count )
                    }
    | FOREIGN KEY
        ( column [ ,...n ] )
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]
    | CHECK ( logical_expression )
}

<column_index> ::=
  INDEX index_name
{ [ NONCLUSTERED ] | [ NONCLUSTERED ] HASH WITH (BUCKET_COUNT = bucket_count)}

<table_index> ::=
  INDEX index_name
{   [ NONCLUSTERED ] HASH (column [ ,... n ] ) WITH (BUCKET_COUNT = bucket_count)
  | [ NONCLUSTERED ] (column [ ASC | DESC ] [ ,... n ] )
      [ ON filegroup_name | default ]
  | CLUSTERED COLUMNSTORE [WITH ( COMPRESSION_DELAY = {0 | delay [Minutes]})]
      [ ON filegroup_name | default ]
  
}
  
<table_option> ::=
{  
    MEMORY_OPTIMIZED = ON
  | DURABILITY = {SCHEMA_ONLY | SCHEMA_AND_DATA}
  | SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name . history_table_name
        [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]
  
}

ArgumentsArguments

database_name database_name
Nom de la base de données dans laquelle la table est créée.Is the name of the database in which the table is created. database_name doit spécifier le nom d’une base de données existante.database_name must specify the name of an existing database. Si aucun nom n’est spécifié, database_name correspond par défaut à la base de données actuelle.If not specified, database_name defaults to the current database. Le nom d’accès de la connexion actuelle doit être associé à un ID d’utilisateur existant dans la base de données spécifiée par database_name, et cet ID d’utilisateur doit disposer des autorisations CREATE TABLE.The login for the current connection must be associated with an existing user ID in the database specified by database_name, and that user ID must have CREATE TABLE permissions.

schema_name schema_name
Nom du schéma auquel appartient la nouvelle table.Is the name of the schema to which the new table belongs.

table_name table_name
Nom de la nouvelle table.Is the name of the new table. Les noms de tables doivent respecter les règles applicables aux identificateurs.Table names must follow the rules for identifiers. table_name peut comprendre un maximum de 128 caractères, à l’exception des noms de tables temporaires locales (noms précédés du signe #) qui ne peuvent pas dépasser 116 caractères.table_name can be a maximum of 128 characters, except for local temporary table names (names prefixed with a single number sign (#)) that cannot exceed 116 characters.

AS FileTableAS FileTable
S’applique à: SQL ServerSQL Server (deSQL Server 2012 (11.x)SQL Server 2012 (11.x) à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

Crée la table en tant que FileTable.Creates the new table as a FileTable. Vous ne spécifiez pas de colonnes car un FileTable dispose d'un schéma fixe.You do not specify columns because a FileTable has a fixed schema. Pour plus d’informations, consultez FileTables.For more information, see FileTables.

column_name column_name
computed_column_expression computed_column_expression
Expression définissant la valeur d'une colonne calculée.Is an expression that defines the value of a computed column. Une colonne calculée est une colonne virtuelle qui n'est pas stockée physiquement dans la table, à moins que la colonne ne soit indiquée comme PERSISTED.A computed column is a virtual column that is not physically stored in the table, unless the column is marked PERSISTED. La colonne est calculée à partir d'une expression qui utilise d'autres colonnes dans la même table.The column is computed from an expression that uses other columns in the same 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.For example, a computed column can have the definition: cost AS price * qty. The expression can be a noncomputed column name, constant, function, variable, and any combination of these connected by one or more operators. L'expression ne peut pas être une sous-requête ou contenir des types de données d'alias.The expression cannot be a subquery or contain alias data types.

Les colonnes calculées peuvent être utilisées dans des listes de sélection, des clauses WHERE, des clauses ORDER BY ou à tout autre emplacement où il est possible d'utiliser des expressions régulières, aux exceptions suivantes près :Computed columns can be used in select lists, WHERE clauses, ORDER BY clauses, or any other locations in which regular expressions can be used, with the following exceptions:

  • Les colonnes calculées doivent être marquées comme PERSISTED pour participer à des contraintes FOREIGN KEY ou CHECK.Computed columns must be marked PERSISTED to participate in a FOREIGN KEY or CHECK constraint.

  • Une colonne calculée peut être utilisée en tant que colonne clé dans un index ou en tant que composante d’une contrainte PRIMARY KEY ou UNIQUE quelconque, si sa valeur est définie par une expression déterministe et si le type de données du résultat est autorisé dans les colonnes d’index.A computed column can be used as a key column in an index or as part of any PRIMARY KEY or UNIQUE constraint, if the computed column value is defined by a deterministic expression and the data type of the result is allowed in index columns.

    Par exemple, si la table possède les colonnes de type entier 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.For example, if the table has integer columns a and b, the computed column a+b may be indexed, but computed column a+DATEPART(dd, GETDATE()) cannot be indexed because the value may change in subsequent invocations.

  • Une colonne calculée ne peut pas être la cible d'une instruction INSERT ou UPDATE.A computed column cannot be the target of an INSERT or UPDATE statement.

Notes

Chaque ligne dans une table peut avoir des valeurs différentes pour les colonnes impliquées dans une colonne calculée ; par conséquent, il est possible que la colonne calculée n'ait pas la même valeur pour chaque ligne.Each row in a table can have different values for columns that are involved in a computed column; therefore, the computed column may not have the same value for each row.

En fonction des expressions utilisées, la possibilité de valeurs NULL dans les colonnes calculées est déterminée automatiquement par le Moteur de base de donnéesDatabase Engine.Based on the expressions that are used, the nullability of computed columns is determined automatically by the Moteur de base de donnéesDatabase Engine. Le résultat de la plupart des expressions est considéré comme pouvant avoir la valeur Null, même si seules des colonnes n'acceptant pas cette valeur sont présentes, car des dépassements négatifs ou positifs possibles produisent également des résultats Null.The result of most expressions is considered nullable even if only nonnullable columns are present, because possible underflows or overflows also produce NULL results. Utilisez la fonction COLUMNPROPERTY avec la propriété AllowsNull pour examiner la possibilité de valeur NULL pour chaque colonne calculée dans une table.Use the COLUMNPROPERTY function with the AllowsNull property to investigate the nullability of any computed column in a table. Une expression qui accepte une valeur Null peut être transformée en expression qui n’accepte pas cette valeur, quand ISNULL est spécifié avec la constante check_expression, où la constante est une valeur non nulle substituée à n’importe quel résultat NULL.An expression that is nullable can be turned into a nonnullable one by specifying ISNULL with the check_expression constant, where the constant is a nonnull value substituted for any NULL result. L'autorisation REFERENCES sur le type est nécessaire pour les colonnes calculées basées sur des expressions de type CLR (Common Language Runtime) défini par l'utilisateur.REFERENCES permission on the type is required for computed columns based on common language runtime (CLR) user-defined type expressions.

PERSISTEDPERSISTED
Spécifie que le Moteur de base de données SQL ServerSQL Server Database Engine 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.Specifies that the Moteur de base de données SQL ServerSQL Server Database Engine will physically store the computed values in the table, and update the values when any other columns on which the computed column depends are updated. Notamment, une colonne calculée en tant que PERSISTED vous permet de créer un index sur une colonne calculée qui est déterministe, mais pas précise.Marking a computed column as PERSISTED lets you create an index on a computed column that is deterministic, but not precise. Pour plus d'informations, consultez Indexes on Computed Columns.For more information, see Indexes on Computed Columns. Les colonnes calculées utilisées comme colonnes de partitionnement d’une table partitionnée doivent être explicitement marquées comme PERSISTED.Any computed columns that are used as partitioning columns of a partitioned table must be explicitly marked PERSISTED. computed_column_expression doit être déterministe quand PERSISTED est spécifié.computed_column_expression must be deterministic when PERSISTED is specified.

ON { partition_scheme | filegroup | "default" }ON { partition_scheme | filegroup | "default" }
Spécifie le schéma de partition ou groupe de fichiers dans lequel la table est stockée.Specifies the partition scheme or filegroup on which the table is stored. Si partition_scheme est spécifié, la table est partitionnée avec des partitions stockées dans un ensemble d’un ou de plusieurs groupes de fichiers spécifié dans partition_scheme.If partition_scheme is specified, the table is to be a partitioned table whose partitions are stored on a set of one or more filegroups specified in partition_scheme. Si filegroup est spécifié, la table est stockée dans le groupe de fichiers nommé.If filegroup is specified, the table is stored in the named filegroup. Le groupe de fichiers doit exister dans la base de données.The filegroup must exist within the database. Si "default" est spécifié, ou si ON n’est pas spécifié du tout, la table est stockée dans le groupe de fichiers par défaut.If "default" is specified, or if ON is not specified at all, the table is stored on the default filegroup. Le mécanisme de stockage d'une table tel que spécifié dans CREATE TABLE ne peut plus être modifié ultérieurement.The storage mechanism of a table as specified in CREATE TABLE cannot be subsequently altered.

ON {partition_scheme | filegroup | "default" } peut également être spécifié dans une contrainte PRIMARY KEY ou UNIQUE.ON {partition_scheme | filegroup | "default"} can also be specified in a PRIMARY KEY or UNIQUE constraint. Ces contraintes créent des index.These constraints create indexes. Si filegroup est spécifié, l’index est stocké dans le groupe de fichiers nommé.If filegroup is specified, the index is stored in the named filegroup. Si "default" est spécifié, ou si ON n’est pas spécifié du tout, l’index est stocké dans le même groupe de fichiers que la table.If "default" is specified, or if ON is not specified at all, the index is stored in the same filegroup as the table. Si la contrainte PRIMARY KEY ou UNIQUE crée un index cluster, les pages de données de la table sont stockées dans le même groupe de fichiers que l’index.If the PRIMARY KEY or UNIQUE constraint creates a clustered index, the data pages for the table are stored in the same filegroup as the index. Si CLUSTERED est spécifié ou si la contrainte crée un index cluster d’une autre manière, et que la valeur partition_scheme spécifiée est différente de la valeur partition_scheme ou filegroup de la définition de table, ou vice versa, seule la définition de la contrainte sera honorée et l’autre sera ignorée.If CLUSTERED is specified or the constraint otherwise creates a clustered index, and a partition_scheme is specified that differs from the partition_scheme or filegroup of the table definition, or vice-versa, only the constraint definition will be honored, and the other will be ignored.

Notes

Dans ce contexte, default n’est pas un mot clé.In this context, default is not a keyword. Il s’agit de l’identificateur du groupe de fichiers par défaut et il doit être délimité, comme dans ON "default" ou ON [ default ] .It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [ default ]. Si "default" est spécifié, l’option QUOTED_IDENTIFIER doit être activée (ON) pour la session active.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Il s'agit du paramètre par défaut.This is the default setting. Pour plus d’informations, voir SET QUOTED_IDENTIFIER.For more information, see SET QUOTED_IDENTIFIER.

Après avoir créé une table partitionnée, pensez à définir l’option LOCK_ESCALATION de la table sur la valeur AUTO.After you create a partitioned table, consider setting the LOCK_ESCALATION option for the table to AUTO. Cela peut améliorer la concurrence en permettant l'escalade des verrous au niveau de la partition (HoBT) plutôt que de la table.This can improve concurrency by enabling locks to escalate to partition (HoBT) level instead of the table. Pour plus d’informations, consultez ALTER TABLE.For more information, see ALTER TABLE.

TEXTIMAGE_ON { filegroup| "default" }TEXTIMAGE_ON { filegroup| "default" }
Indique que les colonnes text, ntext, image, xml, varchar(max) , nvarchar(max) , varbinary(max) et de type CLR (Common Language Runtime) défini par l’utilisateur (y compris géométrie et géographie) sont stockées dans le groupe de fichiers spécifié.Indicates that the text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max), and CLR user-defined type columns (including geometry and geography) are stored on the specified filegroup.

TEXTIMAGE_ON n’est pas autorisé s’il n’y a pas de colonne de valeur élevée dans la table.TEXTIMAGE_ON is not allowed if there are no large value columns in the table. TEXTIMAGE_ON ne peut pas être spécifié si partition_scheme est spécifié.TEXTIMAGE_ON cannot be specified if partition_scheme is specified. Si "default" est spécifié, ou si TEXTIMAGE_ON n’est pas spécifié du tout, les colonnes de valeur élevée sont stockées dans le groupe de fichiers par défaut.If "default" is specified, or if TEXTIMAGE_ON is not specified at all, the large value columns are stored in the default filegroup. Le stockage de données de colonnes de valeur élevée tel que spécifié dans CREATE TABLE ne peut plus être modifié ultérieurement.The storage of any large value column data specified in CREATE TABLE cannot be subsequently altered.

Notes

Les valeurs varchar(max), nvarchar(max), varbinary(max), xml ainsi que les valeurs UDT élevées sont stockées directement dans la ligne de données, jusqu’à une limite de 8 000 octets et tant que la valeur peut être contenue dans l’enregistrement.Varchar(max), nvarchar(max), varbinary(max), xml and large UDT values are stored directly in the data row, up to a limit of 8,000 bytes and as long as the value can fit the record. Si la valeur ne tient pas dans l’enregistrement, un pointeur est stocké dans la ligne et le reste est stocké hors de la ligne dans l’espace de stockage LOB.If the value does not fit in the record, a pointer is sorted in-row and the rest is stored out of row in the LOB storage space. 0 est la valeur par défaut, qui indique que toutes les valeurs sont stockées directement dans la ligne de données.0 is the default value, which indicates that all values are stored directly in the data row.

TEXTIMAGE_ON change uniquement l’emplacement de l’espace de stockage LOB. Il n’a pas d’impact sur le moment où les données sont stockées dans la ligne.TEXTIMAGE_ON only changes the location of the "LOB storage space", it does not affect when data is stored in-row. Utilisez l’option hors ligne des types valeur volumineux de sp_tableoption pour stocker la valeur LOB entière hors de la ligne.Use large value types out of row option of sp_tableoption to store the entire LOB value out of the row.

L'élément « default » n'est pas un mot clé dans ce contexte.In this context, default is not a keyword. Il s’agit de l’identificateur du groupe de fichiers par défaut et il doit être délimité, comme dans TEXTIMAGE_ON "default" ou TEXTIMAGE_ON [default].It is an identifier for the default filegroup and must be delimited, as in TEXTIMAGE_ON "default" or TEXTIMAGE_ON [default]. Si "default" est spécifié, l’option QUOTED_IDENTIFIER doit être activée (ON) pour la session active.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Il s'agit du paramètre par défaut.This is the default setting. Pour plus d’informations, voir SET QUOTED_IDENTIFIER.For more information, see SET QUOTED_IDENTIFIER.

FILESTREAM_ON { partition_scheme_name | filegroup | " default " }FILESTREAM_ON { partition_scheme_name | filegroup | " default " }
S’applique à: SQL ServerSQL Server (deSQL Server 2008 R2SQL Server 2008 R2 à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 through SQL Server 2017SQL Server 2017). Azure SQL DatabaseAzure SQL Database ne prend pas en charge FILESTREAM.does not support FILESTREAM.

Spécifie le groupe de fichiers pour les données FILESTREAM.Specifies the filegroup for FILESTREAM data.

Si la table contient des données FILESTREAM et si elle est partitionnée, la clause FILESTREAM_ON doit être incluse et doit spécifier un schéma de partition de groupes de fichiers FILESTREAM.If the table contains FILESTREAM data and the table is partitioned, the FILESTREAM_ON clause must be included and must specify a partition scheme of FILESTREAM filegroups. Ce schéma de partition doit utiliser la même fonction de partition et les mêmes colonnes de partition que le schéma de partition de la table, faute de quoi une erreur est générée.This partition scheme must use the same partition function and partition columns as the partition scheme for the table; otherwise, an error is raised.

Si la table n'est pas partitionnée, la colonne FILESTREAM ne peut pas être partitionnée.If the table is not partitioned, the FILESTREAM column cannot be partitioned. Les données FILESTREAM de la table doivent être stockées dans un groupe de fichiers unique.FILESTREAM data for the table must be stored in a single filegroup. Ce groupe de fichiers est spécifié dans la clause FILESTREAM_ON.This filegroup is specified in the FILESTREAM_ON clause.

Si la table n’est pas partitionnée et que la clause FILESTREAM_ON n’est pas spécifiée, c’est le groupe de fichiers FILESTREAM avec la propriété DEFAULTqui est utilisé.If the table is not partitioned and the FILESTREAM_ON clause is not specified, the FILESTREAM filegroup that has the DEFAULT property set is used. S'il n'y a aucun groupe de fichiers FILESTREAM, une erreur est générée.If there is no FILESTREAM filegroup, an error is raised.

Comme avec ON et TEXTIMAGE_ON, la valeur définie à l’aide de CREATE TABLE pour FILESTREAM_ON ne peut pas être changée, sauf dans les cas suivants :As with ON and TEXTIMAGE_ON, the value set by using CREATE TABLE for FILESTREAM_ON cannot be changed, except in the following cases:

  • Une instruction CREATE INDEX convertit un segment de mémoire en index cluster.A CREATE INDEX statement converts a heap into a clustered index. Dans ce cas, il est possible de spécifier un autre groupe de fichiers FILESTREAM, un autre schéma de partition ou la valeur NULL.In this case, a different FILESTREAM filegroup, partition scheme, or NULL can be specified.
  • Une instruction DROP INDEX convertit un index cluster en segment de mémoire.A DROP INDEX statement converts a clustered index into a heap. Dans ce cas, il est possible de spécifier un autre groupe de fichiers FILESTREAM, un autre schéma de partition ou la valeur "default" .In this case, a different FILESTREAM filegroup, partition scheme, or "default" can be specified.

Le groupe de fichiers de la clause FILESTREAM_ON <filegroup> ou chaque groupe de fichiers FILESTREAM nommé dans le schéma de partition doit avoir un fichier défini pour le groupe de fichiers.The filegroup in the FILESTREAM_ON <filegroup> clause, or each FILESTREAM filegroup that is named in the partition scheme, must have one file defined for the filegroup. Ce fichier doit être défini à l’aide d’une instruction CREATE DATABASE ou ALTER DATABASE, sinon une erreur est générée.This file must be defined by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

Pour accéder à des rubriques FILESTREAM connexes, consultez Données Blob (Binary Large Object).For related FILESTREAM topics, see Binary Large Object - Blob Data.

[ type_schema_name .[ type_schema_name. ] type_name ] type_name
Précise le type de données de la colonne et le schéma auquel il appartient.Specifies the data type of the column, and the schema to which it belongs. Pour les tables sur disque, le type de données peut être l'un des suivants :For disk-based tables, the data type can be one of the following:

  • Type de données systèmeA system data type
  • Type d'alias basé sur un type de données système SQL ServerSQL Server.An alias type based on a SQL ServerSQL Server system data type. Les types de données alias sont créés à l’aide de l’instruction CREATE TYPE avant de pouvoir être utilisés dans une définition de table.Alias data types are created with the CREATE TYPE statement before they can be used in a table definition. L’affectation NULL ou NOT NULL pour un type de données d’alias peut être ignorée au moment de l’exécution de l’instruction CREATE TABLE.The NULL or NOT NULL assignment for an alias data type can be overridden during the CREATE TABLE statement. Cependant, la spécification de longueur ne peut pas être changée ; la longueur d’un type de données d’alias ne peut pas être spécifiée dans une instruction CREATE TABLE.However, the length specification cannot be changed; the length for an alias data type cannot be specified in a CREATE TABLE statement.
  • Un type CLR défini par l’utilisateur.A CLR user-defined type. Les types de données CLR définis par l’utilisateur sont créés avec l’instruction CREATE TYPE avant de pouvoir être utilisés dans une définition de table.CLR user-defined types are created with the CREATE TYPE statement before they can be used in a table definition. Pour créer une colonne sur un type de données CLR défini par l'utilisateur, une autorisation REFERENCES est nécessaire pour le type.To create a column on CLR user-defined type, REFERENCES permission is required on the type.

Si type_schema_name n’est pas spécifié, le Moteur de base de données SQL ServerSQL Server Database Engine référence type_name dans l’ordre suivant :If type_schema_name is not specified, the Moteur de base de données SQL ServerSQL Server Database Engine references type_name in the following order:

  • Le type de données système SQL ServerSQL ServerThe SQL ServerSQL Server system data type.
  • Le schéma par défaut de l'utilisateur actuel dans la base de données activeThe default schema of the current user in the current database.
  • Schéma dbo dans la base de données active.The dbo schema in the current database.

Pour les tables à mémoire optimisée, consultez Types de données pris en charge pour l’OLTP en mémoire afin d’obtenir une liste des types système pris en charge.For memory-optimized tables, see Supported Data Types for In-Memory OLTP for a list of supported system types.

precision precision
Précision du type de données spécifié.Is the precision for the specified data type. Pour plus d’informations sur les valeurs de précision valides, consultez Précision, échelle et longueur.For more information about valid precision values, see Precision, Scale, and Length.

scale scale
Échelle du type de données spécifié.Is the scale for the specified data type. Pour plus d’informations sur les valeurs d’échelle valides, consultez Précision, échelle et longueur.For more information about valid scale values, see Precision, Scale, and Length.

max max
S’applique uniquement aux types de données varchar, nvarchar et varbinary pour le stockage de 2^31 octets de données caractères et binaires et 2^30 octets de données Unicode.Applies only to the varchar, nvarchar, and varbinary data types for storing 2^31 bytes of character and binary data, and 2^30 bytes of Unicode data.

CONTENTCONTENT
Spécifie que chaque instance du type de données xml dans column_name peut contenir plusieurs éléments de niveau supérieur.Specifies that each instance of the xml data type in column_name can contain multiple top-level elements. CONTENT s’applique uniquement au type de données xml et ne peut être spécifié que si xml_schema_collection l’est également.CONTENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified. En l'absence de toute spécification, CONTENT est le comportement par défaut.If not specified, CONTENT is the default behavior.

DOCUMENTDOCUMENT
Spécifie que chaque instance du type de données xml dans column_name ne peut contenir qu’un seul élément de niveau supérieur.Specifies that each instance of the xml data type in column_name can contain only one top-level element. DOCUMENT s’applique uniquement au type de données xml et ne peut être spécifié que si xml_schema_collection l’est également.DOCUMENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified.

xml_schema_collection xml_schema_collection
S’applique uniquement au type de données xml pour l’association d’une collection de schémas XML au type.Applies only to the xml data type for associating an XML schema collection with the type. Avant d’inclure une colonne xml dans un schéma, vous devez d’abord créer ce dernier dans la base de données à l’aide de CREATE XML SCHEMA COLLECTION.Before typing an xml column to a schema, the schema must first be created in the database by using CREATE XML SCHEMA COLLECTION.

DEFAULTDEFAULT
Spécifie la valeur fournie pour la colonne lorsque vous n'avez pas spécifié explicitement de valeur lors d'une insertion.Specifies the value provided for the column when a value is not explicitly supplied during an insert. Les définitions DEFAULT peuvent être appliquées à n’importe quelle colonne, sauf celles définies en tant que timestamp ou celles ayant la propriété IDENTITY.DEFAULT definitions can be applied to any columns except those defined as timestamp, or those with the IDENTITY property. 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.If a default value is specified for a user-defined type column, the type should support an implicit conversion from constant_expression to the user-defined type. Les définitions de valeurs par défaut sont supprimées lorsque la table est supprimée.DEFAULT definitions are removed when the table is dropped. Seule une valeur constante, telle qu'une chaîne de caractères, une fonction scalaire (fonction système, définie par l'utilisateur ou CLR) ou la valeur NULL peut être utilisée comme valeur par défaut.Only a constant value, such as a character string; a scalar function (either a system, user-defined, or CLR function); or NULL can be used as a default. Pour maintenir la compatibilité avec les versions antérieures de SQL ServerSQL Server, un nom de contrainte peut être affecté à une définition DEFAULT.To maintain compatibility with earlier versions of SQL ServerSQL Server, a constraint name can be assigned to a DEFAULT.

constant_expression constant_expression
Constante, valeur NULL ou fonction système utilisée comme valeur par défaut pour la colonne.Is a constant, NULL, or a system function that is used as the default value for the column.

memory_optimized_constant_expression memory_optimized_constant_expression
Constante, valeur NULL ou fonction système prise en charge comme valeur par défaut pour la colonne.Is a constant, NULL, or a system function that is supported in used as the default value for the column. Doit être prise en charge dans les procédures stockées compilées en mode natif.Must be supported in natively compiled stored procedures. Pour plus d’informations sur les fonctions intégrées dans les procédures stockées compilées en mode natif, consultez Fonctionnalités prises en charge pour les modules T-SQL compilés en mode natif.For more information about built-in functions in natively compiled stored procedures, see Supported Features for Natively Compiled T-SQL Modules.

IDENTITYIDENTITY
Indique que la nouvelle colonne est une colonne d'identité.Indicates that the new column is an identity column. Lorsqu'une ligne est ajoutée à la table, le Moteur de base de donnéesDatabase Engine affecte une valeur incrémentée unique à la colonne.When a new row is added to the table, the Moteur de base de donnéesDatabase Engine provides a unique, incremental value for the column. Les colonnes d'identité sont normalement utilisées avec les contraintes PRIMARY KEY comme identificateur de ligne unique pour la table.Identity columns are typically used with PRIMARY KEY constraints to serve as the unique row identifier for the table. La propriété IDENTITY peut être affectée à des colonnes tinyint, smallint, int, bigint, decimal(p,0) ou numeric(p,0) .The IDENTITY property can be assigned to tinyint, smallint, int, bigint, decimal(p,0), or numeric(p,0) columns. Une seule colonne d'identité peut être créée par table.Only one identity column can be created per table. Il n'est pas possible d'utiliser des valeurs par défaut liées et des contraintes DEFAULT avec une colonne d'identité.Bound defaults and DEFAULT constraints cannot be used with an identity column. Vous devez spécifier à la fois la valeur initiale et l'incrément ou aucune de ces valeurs.Both the seed and increment or neither must be specified. Si vous n'en spécifiez aucun, la valeur par défaut est (1,1).If neither is specified, the default is (1,1).

seed seed
Valeur utilisée pour la toute première ligne chargée dans la table.Is the value used for the very first row loaded into the table.

increment increment
Valeur d’incrément ajoutée à la valeur d’identité de la ligne précédemment chargée.Is the incremental value added to the identity value of the previous row loaded.

NOT FOR REPLICATIONNOT FOR REPLICATION
Dans l’instruction CREATE TABLE, la clause NOT FOR REPLICATION peut être spécifiée pour la propriété IDENTITY, les contraintes FOREIGN KEY et les contraintes CHECK.In the CREATE TABLE statement, the NOT FOR REPLICATION clause can be specified for the IDENTITY property, FOREIGN KEY constraints, and CHECK constraints. Si la 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 insertions.If this clause is specified for the IDENTITY property, values are not incremented in identity columns when replication agents perform inserts. 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.If this clause is specified for a constraint, the constraint is not enforced when replication agents perform insert, update, or delete operations.

GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] [ NOT NULL ]GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] [ NOT NULL ]
S’applique à : SQL ServerSQL Server (de SQL Server 2016 (13.x)SQL Server 2016 (13.x) à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Spécifie qu’une colonne datetime2 spécifiée sera utilisée par le système pour enregistrer l’heure de début ou l’heure de fin pour laquelle un enregistrement est valide.Specifies that a specified datetime2 column will be used by the system to record either the start time for which a record is valid or the end time for which a record is valid. La colonne doit être définie comme NOT NULL.The column must be defined as NOT NULL. Si vous essayez de la spécifier comme NULL, le système génère une erreur.If you attempt to specify them as NULL, the system will throw an error. Si vous ne spécifiez pas explicitement NOT NULL pour une colonne de période, le système définit la colonne comme NOT NULL par défaut.If you do not explicitly specify NOT NULL for a period column, the system will define the column as NOT NULL by default. Utilisez cet argument conjointement avec les arguments PERIOD FOR SYSTEM_TIME et WITH SYSTEM_VERSIONING = ON pour activer la gestion système des versions sur une table.Use this argument in conjunction with the PERIOD FOR SYSTEM_TIME and WITH SYSTEM_VERSIONING = ON arguments to enable system versioning on a table. Pour plus d’informations, voir Temporal Tables.For more information, see Temporal Tables.

Vous pouvez marquer une colonne de période, ou les deux, avec l’indicateur HIDDEN afin de masquer implicitement ces colonnes pour que SELECT * FROM <table> ne retourne pas de valeur pour elles.You can mark one or both period columns with HIDDEN flag to implicitly hide these columns such that SELECT * FROM<table> does not return a value for those columns. Par défaut, les colonnes de période ne sont pas masquées.By default, period columns are not hidden. Pour pouvoir être utilisées, les colonnes masquées doivent être incluses explicitement dans toutes les requêtes qui référencent directement la table temporelle.In order to be used, hidden columns must be explicitly included in all queries that directly reference the temporal table. Pour changer l’attribut HIDDEN pour une colonne de période existante, vous devez supprimer puis recréer PERIOD avec un indicateur HIDDEN différent.To change the HIDDEN attribute for an existing period column, PERIOD must be dropped and recreated with a different hidden flag.

INDEX index_name [ CLUSTERED | NONCLUSTERED ] (column_name [ ASC | DESC ] [ ,... n ] )INDEX index_name [ CLUSTERED | NONCLUSTERED ] (column_name [ ASC | DESC ] [ ,... n ] )
S’applique à : SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Indique qu’il faut créer un index sur la table.Specifies to create an index on the table. Il peut s’agir d’un index cluster ou non-cluster.This can be a clustered index, or a nonclustered index. L’index contiendra les colonnes répertoriées et triera les données dans l’ordre croissant ou décroissant.The index will contain the columns listed, and will sort the data in either ascending or descending order.

INDEX index_name CLUSTERED COLUMNSTOREINDEX index_name CLUSTERED COLUMNSTORE
S’applique à : SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Indique qu’il faut stocker la table entière sous forme de colonnes avec un index cluster columnstore.Specifies to store the entire table in columnar format with a clustered columnstore index. Cela inclut toujours toutes les colonnes de la table.This always includes all columns in the table. Les données ne sont pas triées par ordre alphabétique ou numérique, car les lignes sont organisées de manière à tirer parti de la compression columnstore.The data is not sorted in alphabetical or numeric order since the rows are organized to gain columnstore compression benefits.

INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )
S’applique à : SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Indique qu’il faut créer un index non-cluster columnstore sur la table.Specifies to create a nonclustered columnstore index on the table. La table sous-jacente peut être un segment de mémoire rowstore ou un index cluster, ou il peut s’agir d’un index columnstore cluster.The underlying table can be a rowstore heap or clustered index, or it can be a clustered columnstore index. Dans tous les cas, la création d’un index columnstore non-cluster sur une table stocke une deuxième copie des données pour les colonnes dans l’index.In all cases, creating a nonclustered columnstore index on a table stores a second copy of the data for the columns in the index.

L’index columnstore non-cluster est stocké et géré en tant qu’index columnstore cluster.The nonclustered columnstore index is stored and managed as a clustered columnstore index. Il porte le nom d’index columnstore non-cluster car les colonnes peuvent être limitées et il existe en tant qu’index secondaire sur une table.It is called a nonclustered columnstore index to because the columns can be limited and it exists as a secondary index on a table.

ON partition_scheme_name ( column_name ) ON partition_scheme_name(column_name)
Spécifie le schéma de partition qui définit les groupes de fichiers auxquels les partitions d'un index partitionné seront mappées.Specifies the partition scheme that defines the filegroups onto which the partitions of a partitioned index will be mapped. Le schéma de partition doit exister dans la base de données en exécutant soit CREATE PARTITION SCHEME, soit ALTER PARTITION SCHEME.The partition scheme must exist within the database by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. column_name spécifie la colonne par rapport à laquelle un index partitionné sera partitionné.column_name specifies the column against which a partitioned index will be partitioned. Cette colonne doit correspondre au type de données, à la longueur et à la précision de l’argument de la fonction de partition que partition_scheme_name utilise.This column must match the data type, length, and precision of the argument of the partition function that partition_scheme_name is using. column_name n’est pas limité aux colonnes de la définition d’index.column_name is not restricted to the columns in the index definition. Toute colonne de la table de base peut être spécifiée, sauf lors du partitionnement d’un index UNIQUE ; le nom de colonne column_name doit être choisi parmi les noms de colonnes utilisés comme clés uniques.Any column in the base table can be specified, except when partitioning a UNIQUE index, column_name must be chosen from among those used as the unique key. Cette restriction permet au Moteur de base de donnéesDatabase Engine de vérifier l'unicité des valeurs de clés dans une seule partition uniquement.This restriction allows the Moteur de base de donnéesDatabase Engine to verify uniqueness of key values within a single partition only.

Notes

Lorsque vous partitionnez un index cluster non unique, le Moteur de base de donnéesDatabase Engine ajoute par défaut la colonne de partitionnement à la liste des clés d'index cluster, si elle n'est pas déjà spécifiée.When you partition a non-unique, clustered index, the Moteur de base de donnéesDatabase Engine by default adds the partitioning column to the list of clustered index keys, if it is not already specified. Lorsque vous partitionnez un index non cluster non unique, le Moteur de base de donnéesDatabase Engine ajoute la colonne de partitionnement sous la forme d'une colonne (incluse) non clé de l'index, si elle n'est pas déjà spécifiée.When partitioning a non-unique, nonclustered index, the Moteur de base de donnéesDatabase Engine adds the partitioning column as a non-key (included) column of the index, if it is not already specified.

Si partition_scheme_name ou filegroup n’est pas spécifié et que la table est partitionnée, l’index est placé dans le même schéma de partition que la table sous-jacente, en utilisant la même colonne de partitionnement.If partition_scheme_name or filegroup is not specified and the table is partitioned, the index is placed in the same partition scheme, using the same partitioning column, as the underlying table.

Notes

Vous ne pouvez pas spécifier un schéma de partitionnement dans un index XML.You cannot specify a partitioning scheme on an XML index. Si la table de base est partitionnée, l'index XML utilise le même schéma de partition que la table.If the base table is partitioned, the XML index uses the same partition scheme as the table.

Pour plus d’informations sur le partitionnement d’index, consultez Tables et index partitionnés.For more information about partitioning indexes, Partitioned Tables and Indexes.

ON filegroup_name ON filegroup_name
Crée l'index spécifié dans le groupe de fichiers spécifié.Creates the specified index on the specified filegroup. Si aucun emplacement n'est défini et que la table ou la vue n'est pas partitionnée, l'index utilise le même groupe de fichiers que la table ou la vue sous-jacente.If no location is specified and the table or view is not partitioned, the index uses the same filegroup as the underlying table or view. Le groupe de fichiers doit déjà exister.The filegroup must already exist.

ON "default" ON "default"
Crée l'index spécifié sur le groupe de fichiers par défaut.Creates the specified index on the default filegroup.

Le terme « default », dans ce contexte, n'est pas un mot clé.The term default, in this context, is not a keyword. Il s’agit de l’identificateur du groupe de fichiers par défaut et il doit être délimité, comme dans ON "default" ou ON [default] .It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [default]. Si "default" est spécifié, l’option QUOTED_IDENTIFIER doit être activée (ON) pour la session active.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Il s'agit du paramètre par défaut.This is the default setting. Pour plus d’informations, voir SET QUOTED_IDENTIFIER.For more information, see SET QUOTED_IDENTIFIER.

[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ][ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
S’applique à: SQL ServerSQL Server (deSQL Server 2008 R2SQL Server 2008 R2 à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 through SQL Server 2017SQL Server 2017).

Spécifie le positionnement de données FILESTREAM pour la table lorsqu'un index cluster est créé.Specifies the placement of FILESTREAM data for the table when a clustered index is created. La clause FILESTREAM_ON permet le déplacement des données FILESTREAM vers un schéma de partition ou un groupe de fichiers FILESTREAM différent.The FILESTREAM_ON clause allows FILESTREAM data to be moved to a different FILESTREAM filegroup or partition scheme.

filestream_filegroup_name est le nom d’un groupe de fichiers FILESTREAM.filestream_filegroup_name is the name of a FILESTREAM filegroup. Le groupe de fichiers doit avoir un fichier défini pour le groupe de fichiers à l’aide d’une instruction CREATE DATABASE ou ALTER DATABASE ; dans le cas contraire, une erreur est générée.The filegroup must have one file defined for the filegroup by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

Si la table est partitionnée, la clause FILESTREAM_ON doit être incluse et doit spécifier un schéma de partition de groupes de fichiers FILESTREAM qui utilise la même fonction de partition et les mêmes colonnes de partition que le schéma de partition de la table.If the table is partitioned, the FILESTREAM_ON clause must be included and must specify a partition scheme of FILESTREAM filegroups that uses the same partition function and partition columns as the partition scheme for the table. Dans le cas contraire, une erreur est générée.Otherwise, an error is raised.

Si la table n'est pas partitionnée, la colonne FILESTREAM ne peut pas être partitionnée.If the table is not partitioned, the FILESTREAM column cannot be partitioned. Les données FILESTREAM de la table doivent être stockées dans un groupe de fichiers unique spécifié dans la clause FILESTREAM_ON.FILESTREAM data for the table must be stored in a single filegroup that is specified in the FILESTREAM_ON clause.

FILESTREAM_ON NULL peut être spécifié dans une instruction CREATE INDEX si un index cluster est créé et si la table ne contient pas de colonne FILESTREAM.FILESTREAM_ON NULL can be specified in a CREATE INDEX statement if a clustered index is being created and the table does not contain a FILESTREAM column.

Pour plus d’informations, consultez FILESTREAM.For more information, see FILESTREAM.

ROWGUIDCOLROWGUIDCOL
Indique que la nouvelle colonne est une colonne d’identité ROWGUID.Indicates that the new column is a row GUID column. Une seule colonne uniqueidentifier par table peut être désignée comme colonne ROWGUIDCOL.Only one uniqueidentifier column per table can be designated as the ROWGUIDCOL column. L’application de la propriété ROWGUIDCOL permet à la colonne d’être référencée à l’aide de $ROWGUID.Applying the ROWGUIDCOL property enables the column to be referenced using $ROWGUID. La propriété ROWGUIDCOL ne peut être affectée qu’à une colonne uniqueidentifier.The ROWGUIDCOL property can be assigned only to a uniqueidentifier column. Les colonnes avec un type de données défini par l'utilisateur ne peuvent pas être conçues avec ROWGUIDCOL.User-defined data type columns cannot be designated with ROWGUIDCOL.

La propriété ROWGUIDCOL n'assure pas l'unicité des valeurs stockées dans la colonne.The ROWGUIDCOL property does not enforce uniqueness of the values stored in the column. ROWGUIDCOL ne peut pas non plus générer automatiquement des valeurs pour les nouvelles lignes insérées dans la table.ROWGUIDCOL also does not automatically generate values for new rows inserted into the table. Pour générer des valeurs uniques pour chaque colonne, vous pouvez soit utiliser la fonction NEWID ou NEWSEQUENTIALID sur des instructions INSERT, soit utiliser ces fonctions comme fonctions par défaut pour la colonne.To generate unique values for each column, either use the NEWID or NEWSEQUENTIALID function on INSERT statements or use these functions as the default for the column.

ENCRYPTED WITHENCRYPTED WITH
Indique que les colonnes doivent être chiffrées à l’aide de la fonctionnalité Always Encrypted.Specifies encrypting columns by using the Always Encrypted feature.

COLUMN_ENCRYPTION_KEY = key_name COLUMN_ENCRYPTION_KEY = key_name
Spécifie la clé de chiffrement de colonne.Specifies the column encryption key. Pour plus d’informations, consultez CREATE COLUMN ENCRYPTION KEY.For more information, see CREATE COLUMN ENCRYPTION KEY.

ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }
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.Deterministic encryption uses a method which always generates the same encrypted value for any given plain text value. 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.Using deterministic encryption allows searching using equality comparison, grouping, and joining tables using equality joins based on encrypted values, but can also allow unauthorized users to guess information about encrypted values by examining patterns in the encrypted column. 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.Joining two tables on columns encrypted deterministically is only possible if both columns are encrypted using the same column encryption key. Le chiffrement déterministe doit utiliser un classement de colonne avec un ordre de tri binaire 2 pour les colonnes de type caractère.Deterministic encryption must use a column collation with a binary2 sort order for character columns.

Lechiffrement aléatoire utilise une méthode qui chiffre les données de manière moins prévisible.Randomized encryption uses a method that encrypts data in a less predictable manner. 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 des enclaves sécurisées.Randomized encryption is more secure, but it prevents any computations and indexing on encrypted columns, unless your SQL Server instance supports Always Encrypted with secure enclaves. Consultez Always Encrypted avec enclaves sécurisées pour plus d’informations.Please see Always Encrypted with secure enclaves for details.

Si vous utilisez Always Encrypted (sans enclaves sécurisées), utilisez le chiffrement déterministe pour les colonnes dans lesquelles des recherches seront effectuées avec des paramètres ou des paramètres de regroupement, par exemple un numéro d’identification gouvernemental.If you are using Always Encrypted (without secure enclaves), use deterministic encryption for columns that will be searched with parameters or grouping parameters, for example a government ID number. Utilisez le chiffrement aléatoire pour les données telles qu’un numéro de carte de crédit, qui ne sont pas regroupées avec d’autres enregistrements, ou utilisées pour joindre des tables, et qui ne sont pas soumises à des recherches car vous utilisez d’autres colonnes (par exemple un numéro de transaction) pour rechercher la ligne qui contient la colonne chiffrée qui vous intéresse.Use randomized encryption, for data such as a credit card number, which is not grouped with other records or used to join tables, and which is not searched for because you use other columns (such as a transaction number) to find the row which contains the encrypted column of interest.

Si vous utilisez Always Encrypted avec enclaves sécurisées, le chiffrement aléatoire est un type de chiffrement recommandé.If you are using Always Encrypted with secure enclaves, randomized encryption is a recommended encryption type.

Les colonnes doivent être d’un type de données qualifié.Columns must be of a qualifying data type.

ALGORITHMALGORITHM
S’applique à: SQL ServerSQL Server (deSQL Server 2016 (13.x)SQL Server 2016 (13.x) à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017).

Doit être 'AEAD_AES_256_CBC_HMAC_SHA_256' .Must be 'AEAD_AES_256_CBC_HMAC_SHA_256'.

Pour plus d’informations, notamment sur les contraintes de fonctionnalité, consultez Always Encrypted.For more information including feature constraints, see Always Encrypted.

SPARSESPARSE
Indique que la nouvelle colonne est une colonne éparse.Indicates that the column is a sparse column. Le stockage des colonnes éparses est optimisé pour les valeurs Null.The storage of sparse columns is optimized for null values. Les colonnes éparses ne peuvent pas être désignées comme NOT NULL.Sparse columns cannot be designated as NOT NULL. Pour connaître les restrictions supplémentaires et obtenir plus d’informations sur les colonnes éparses, consultez Utiliser des colonnes éparses.For additional restrictions and more information about sparse columns, see Use Sparse Columns.

MASKED WITH ( FUNCTION = ’ mask_function ’)MASKED WITH ( FUNCTION = ' mask_function ')
S’applique à: SQL ServerSQL Server (deSQL Server 2016 (13.x)SQL Server 2016 (13.x) à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017).

Spécifie un masque dynamique des données.Specifies a dynamic data mask. mask_function est le nom de la fonction de masquage avec les paramètres appropriés.mask_function is the name of the masking function with the appropriate parameters. Quatre fonctions sont disponibles :Four functions are available:

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

Pour les paramètres de fonction, consultez Masquage dynamique des données.For function parameters, see Dynamic Data Masking.

FILESTREAMFILESTREAM
S’applique à : SQL ServerSQL Server (de SQL Server 2008 R2SQL Server 2008 R2 à SQL Server 2017SQL Server 2017)Applies to: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 through SQL Server 2017SQL Server 2017)

Valide uniquement pour les colonnes varbinary(max) .Valid only for varbinary(max) columns. Spécifie le stockage FILESTREAM pour les données BLOB varbinary(max) .Specifies FILESTREAM storage for the varbinary(max) BLOB data.

La table doit également comporter une colonne du type de données uniqueidentifier ayant l’attribut ROWGUIDCOL.The table must also have a column of the uniqueidentifier data type that has the ROWGUIDCOL attribute. Cette colonne ne doit pas autoriser les valeurs Null et doit avoir une contrainte de colonne unique de type UNIQUE ou PRIMARY KEY.This column must not allow null values and must have either a UNIQUE or PRIMARY KEY single-column constraint. 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 ().The GUID value for the column must be supplied either by an application when inserting data, or by a DEFAULT constraint that uses the NEWID () function.

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.The ROWGUIDCOL column cannot be dropped and the related constraints cannot be changed while there is a FILESTREAM column defined for the table. La colonne ROWGUIDCOL peut être supprimée uniquement lorsque la dernière colonne FILESTREAM a été supprimée.The ROWGUIDCOL column can be dropped only after the last FILESTREAM column is dropped.

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.When the FILESTREAM storage attribute is specified for a column, all values for that column are stored in a FILESTREAM data container on the file system.

COLLATE collation_name COLLATE collation_name
Indique le classement de la colonne.Specifies the collation for the column. Le nom du classement peut être un nom de classement Windows ou un nom de classement SQL.Collation name can be either a Windows collation name or an SQL collation name. collation_name s’applique uniquement aux colonnes des types de données char, varchar, texte, nchar, nvarchar et ntext.collation_name is applicable only for columns of the char, varchar, text, nchar, nvarchar, and ntext data types. Si cette valeur n'est pas spécifiée, la colonne reçoit le classement du type de données utilisateur, si son type de données est un type de données utilisateur, ou le classement par défaut de la base de données.If not specified, the column is assigned either the collation of the user-defined data type, if the column is of a user-defined data type, or the default collation of the database.

Pour plus d’informations sur les noms de classements Windows et SQL, consultez Nom de classement Windows et Nom de classement SQL.For more information about the Windows and SQL collation names, see Windows Collation Name and SQL Collation Name.

Pour plus d’informations, consultez l’article COLLATE.For more information, see COLLATE.

CONSTRAINTCONSTRAINT
Mot clé facultatif qui indique le début de la définition d’une contrainte PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY ou CHECK.Is an optional keyword that indicates the start of the definition of a PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY, or CHECK constraint.

constraint_name constraint_name
Nom d’une contrainte.Is the name of a constraint. Les noms de contraintes doivent être uniques au sein du schéma auquel appartient la table.Constraint names must be unique within the schema to which the table belongs.

NULL | NOT NULLNULL | NOT NULL
Détermine si les valeurs Null sont autorisées dans la colonne.Determine whether null values are allowed in the column. NULL n'est pas strictement une contrainte, mais peut être spécifié comme NOT NULL.NULL is not strictly a constraint but can be specified just like NOT NULL. Il est possible de spécifier NOT NULL pour des colonnes calculées seulement si PERSISTED est également spécifié.NOT NULL can be specified for computed columns only if PERSISTED is also specified.

PRIMARY KEYPRIMARY KEY
Contrainte assurant l’intégrité d’entité d’une ou de plusieurs colonnes spécifiées au moyen d’un index unique.Is a constraint that enforces entity integrity for a specified column or columns through a unique index. Une seule contrainte PRIMARY KEY peut être créée par table.Only one PRIMARY KEY constraint can be created per table.

UNIQUEUNIQUE
Contrainte assurant l'intégrité de l'entité d'une colonne ou de plusieurs colonnes spécifiées au moyen d'un index unique.Is a constraint that provides entity integrity for a specified column or columns through a unique index. Une table peut comprendre plusieurs contraintes UNIQUE.A table can have multiple UNIQUE constraints.

CLUSTERED et NONCLUSTEREDCLUSTERED | NONCLUSTERED
Indique qu'un index, cluster ou non cluster, est créé pour la contrainte PRIMARY KEY ou UNIQUE.Indicate that a clustered or a nonclustered index is created for the PRIMARY KEY or UNIQUE constraint. Les contraintes PRIMARY KEY ont la valeur par défaut CLUSTERED et les contraintes UNIQUE la valeur par défaut NONCLUSTERED.PRIMARY KEY constraints default to CLUSTERED, and UNIQUE constraints default to NONCLUSTERED.

CLUSTERED peut être spécifié pour une seule contrainte dans une instruction CREATE TABLE.In a CREATE TABLE statement, CLUSTERED can be specified for only one constraint. Si CLUSTERED est spécifié pour une contrainte UNIQUE et une contrainte PRIMARY KEY est également spécifiée, la contrainte PRIMARY KEY a la valeur par défaut NONCLUSTERED.If CLUSTERED is specified for a UNIQUE constraint and a PRIMARY KEY constraint is also specified, the PRIMARY KEY defaults to NONCLUSTERED.

FOREIGN KEY REFERENCESFOREIGN KEY REFERENCES
Contrainte qui assure l'intégrité référentielle des données des colonnes.Is a constraint that provides referential integrity for the data in the column or columns. 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.FOREIGN KEY constraints require that each value in the column exists in the corresponding referenced column or columns in the referenced table. 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.FOREIGN KEY constraints can reference only columns that are PRIMARY KEY or UNIQUE constraints in the referenced table or columns referenced in a UNIQUE INDEX on the referenced table. Les clés étrangères des colonnes calculées doivent également être marquées comme PERSISTED.Foreign keys on computed columns must also be marked PERSISTED.

[ schema_name . ] referenced_table_name][ schema_name.] referenced_table_name]
Nom de la table référencée par la contrainte FOREIGN KEY, et le schéma à laquelle elle appartient.Is the name of the table referenced by the FOREIGN KEY constraint, and the schema to which it belongs.

( ref_column [ , ... n ] ) est une colonne, ou liste de colonnes, provenant de la table référencée par la contrainte FOREIGN KEY.( ref_column [ ,... n ] ) Is a column, or list of columns, from the table referenced by the FOREIGN KEY constraint.

ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
Spécifie l’action qui se produit dans les lignes de la table créée, si ces lignes comportent une relation référentielle et si la ligne référencée est supprimée de la table parente.Specifies what action happens to rows in the table created, if those rows have a referential relationship and the referenced row is deleted from the parent table. La valeur par défaut est NO ACTION.The default is NO ACTION.

NO ACTIONNO ACTION
Le Moteur de base de donnéesDatabase Engine déclenche une erreur et la suppression de la ligne dans la table parent est annulée.The Moteur de base de donnéesDatabase Engine raises an error and the delete action on the row in the parent table is rolled back.

CASCADECASCADE
Les lignes correspondantes sont supprimées de la table de référence pour celles supprimées de la table parent.Corresponding rows are deleted from the referencing table if that row is deleted from the parent table.

SET NULLSET NULL
Toutes les valeurs qui composent la clé étrangère sont NULL si la ligne correspondante dans la table parente est supprimée.All the values that make up the foreign key are set to NULL if the corresponding row in the parent table is deleted. Pour que cette contrainte s'applique, les colonnes clés étrangères doivent pouvoir cependant être définies sur NULL.For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULTSET DEFAULT
Toutes les valeurs qui composent la clé étrangère sont celles par défaut si la ligne correspondante dans la table parente est supprimée.All the values that make up the foreign key are set to their default values if the corresponding row in the parent table is deleted. Pour que cette contrainte s'applique, les colonnes clés étrangères doivent disposer cependant de valeur par défaut.For this constraint to execute, all foreign key columns must have default definitions. Si une colonne peut être affectée de la valeur NULL et qu'aucune valeur par défaut n'est définie, NULL constitue alors la valeur par défaut de la colonne de façon implicite.If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

Ne spécifiez pas CASCADE si la table est incluse dans une publication de fusion qui utilise des enregistrements logiques.Do not specify CASCADE if the table will be included in a merge publication that uses logical records. Pour plus d’informations sur les enregistrements logiques, consultez Regrouper les modifications apportées à des lignes connexes à l’aide d’enregistrements logiques.For more information about logical records, see Group Changes to Related Rows with Logical Records.

ON DELETE CASCADE ne peut pas être spécifié si un déclencheur INSTEAD OF défini sur ON DELETE existe déjà sur la table.ON DELETE CASCADE cannot be defined if an INSTEAD OF trigger ON DELETE already exists on the table.

Par exemple, dans la base de données AdventureWorks2012AdventureWorks2012, la table ProductVendor a une relation référentielle avec la table Vendor.For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table. La clé étrangère ProductVendor.BusinessEntityID référence la clé primaire Vendor.BusinessEntityID.The ProductVendor.BusinessEntityID foreign key references the Vendor.BusinessEntityID primary key.

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éesDatabase Engine vérifie la présence d’une ou de plusieurs lignes dépendantes dans la table ProductVendor.If a DELETE statement is executed on a row in the Vendor table, and an ON DELETE CASCADE action is specified for ProductVendor.BusinessEntityID, the Moteur de base de donnéesDatabase Engine checks for one or more dependent rows in the ProductVendor table. Le cas échéant, les lignes dépendantes détectées dans la table ProductVendor sont supprimées, ainsi que la ligne référencée dans la table Vendor.If any exist, the dependent rows in the ProductVendor table are deleted, and also the row referenced in the Vendor table.

En revanche, si la valeur NO ACTION est spécifiée, le Moteur de base de donnéesDatabase Engine génère une erreur et annule la suppression de la ligne dans la table Vendor si au moins une ligne y fait référence dans la table ProductVendor.Conversely, if NO ACTION is specified, the Moteur de base de donnéesDatabase Engine raises an error and rolls back the delete action on the Vendor row if there is at least one row in the ProductVendor table that references it.

ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
Spécifie l'action qui se produit sur les lignes de la table modifiée, si chacune de ces lignes possède une relation référentielle et que la ligne référencée correspondante est mise à jour dans la table parent.Specifies what action happens to rows in the table altered when those rows have a referential relationship and the referenced row is updated in the parent table. La valeur par défaut est NO ACTION.The default is NO ACTION.

NO ACTIONNO ACTION
Le Moteur de base de donnéesDatabase Engine déclenche une erreur et la mise à jour de la ligne dans la table parente est restaurée.The Moteur de base de donnéesDatabase Engine raises an error, and the update action on the row in the parent table is rolled back.

CASCADECASCADE
Les lignes correspondantes sont mises à jour dans la table de référence si la ligne de la table parent est mise à jour.Corresponding rows are updated in the referencing table when that row is updated in the parent table.

SET NULLSET NULL
Toutes les valeurs composant la clé étrangère sont définies sur NULL si la ligne correspondante se trouvant à l'origine dans la table parent est mise à jour.All the values that make up the foreign key are set to NULL when the corresponding row in the parent table is updated. Pour que cette contrainte s'applique, les colonnes clés étrangères doivent pouvoir cependant être définies sur NULL.For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULTSET DEFAULT
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.All the values that make up the foreign key are set to their default values when the corresponding row in the parent table is updated. Pour que cette contrainte s'applique, les colonnes clés étrangères doivent disposer cependant de valeur par défaut.For this constraint to execute, all foreign key columns must have default definitions. Si une colonne peut être affectée de la valeur NULL et qu'aucune valeur par défaut n'est définie, NULL constitue alors la valeur par défaut de la colonne de façon implicite.If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

Ne spécifiez pas CASCADE si la table est incluse dans une publication de fusion qui utilise des enregistrements logiques.Do not specify CASCADE if the table will be included in a merge publication that uses logical records. Pour plus d’informations sur les enregistrements logiques, consultez Regrouper les modifications apportées à des lignes connexes à l’aide d’enregistrements logiques.For more information about logical records, see Group Changes to Related Rows with Logical Records.

ON UPDATE CASCADE, SET NULL ou SET DEFAULT ne peut pas être spécifié si un déclencheur INSTEAD OF défini sur ON UPDATE existe déjà dans la table en cours de modification.ON UPDATE CASCADE, SET NULL, or SET DEFAULT cannot be defined if an INSTEAD OF trigger ON UPDATE already exists on the table that is being altered.

Par exemple, dans la base de données AdventureWorks2012AdventureWorks2012, la table ProductVendor a une relation référentielle avec la table Vendor : la clé étrangère ProductVendor.BusinessEntity référence la clé primaire Vendor.BusinessEntityID.For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table: ProductVendor.BusinessEntity foreign key references the Vendor.BusinessEntityID primary key.

Si une instruction UPDATE est exécutée sur une ligne de la table Vendor et qu’une action ON UPDATE CASCADE est spécifiée pour ProductVendor.BusinessEntityID, le Moteur de base de donnéesDatabase Engine vérifie la présence de lignes dépendantes dans la table ProductVendor.If an UPDATE statement is executed on a row in the Vendor table, and an ON UPDATE CASCADE action is specified for ProductVendor.BusinessEntityID, the Moteur de base de donnéesDatabase Engine checks for one or more dependent rows in the ProductVendor table. Le cas échéant, les lignes dépendantes détectées dans la table ProductVendor sont mises à jour, ainsi que la ligne référencée dans la table Vendor.If any exist, the dependent rows in the ProductVendor table are updated, and also the row referenced in the Vendor table.

En revanche, si la valeur NO ACTION est spécifiée, le Moteur de base de donnéesDatabase Engine génère une erreur et restaure la mise à jour de la ligne dans la table Vendor si au moins une ligne y fait référence dans la table ProductVendor.Conversely, if NO ACTION is specified, the Moteur de base de donnéesDatabase Engine raises an error and rolls back the update action on the Vendor row if there is at least one row in the ProductVendor table that references it.

CHECKCHECK
Contrainte qui assure l'intégrité du domaine en limitant les valeurs possibles pouvant être entrées dans une ou plusieurs colonnes.Is a constraint that enforces domain integrity by limiting the possible values that can be entered into a column or columns. Les contraintes CHECK des colonnes calculées doivent également être marquées comme PERSISTED.CHECK constraints on computed columns must also be marked PERSISTED.

logical_expression logical_expression
Expression logique qui retourne TRUE ou FALSE.Is a logical expression that returns TRUE or FALSE. Les types de données d'alias ne peuvent pas faire partie de l'expression.Alias data types cannot be part of the expression.

column column
Colonne, ou liste de colonnes, entre parenthèses, utilisée dans des contraintes de table pour indiquer les colonnes utilisées dans la définition de la contrainte.Is a column or list of columns, in parentheses, used in table constraints to indicate the columns used in the constraint definition.

[ ASC | DESC ][ ASC | DESC ]
Indique l'ordre de tri de la ou des colonnes impliquées dans les contraintes de table.Specifies the order in which the column or columns participating in table constraints are sorted. La valeur par défaut est ASC.The default is ASC.

partition_scheme_name partition_scheme_name
Nom du schéma de partition qui définit les groupes de fichiers vers lesquels les partitions d’une table partitionnée seront mappées.Is the name of the partition scheme that defines the filegroups onto which the partitions of a partitioned table will be mapped. Le schéma de partition doit exister dans la base de données.The partition scheme must exist within the database.

[ partition_colonne_nom .[ partition_column_name. ]]
Désigne la colonne selon laquelle une table partitionnée sera partitionnée.Specifies the column against which a partitioned table will be partitioned. Cette colonne doit être identique en termes de type de données, de longueur et de précision à celle qui est spécifiée dans la fonction de partition utilisée par partition_scheme_name.The column must match that specified in the partition function that partition_scheme_name is using in terms of data type, length, and precision. Une colonne calculée qui participe à une fonction de partition doit être explicitement marquée comme PERSISTED.A computed columns that participates in a partition function must be explicitly marked PERSISTED.

Important

Nous vous conseillons de spécifier NOT NULL sur la colonne de partitionnement des tables partitionnées et également des tables non partitionnées qui sont sources ou cibles d'opérations ALTER TABLE...SWITCH.We recommend that you specify NOT NULL on the partitioning column of partitioned tables, and also nonpartitioned tables that are sources or targets of ALTER TABLE...SWITCH operations. Vous êtes ainsi certain que les contraintes CHECK sur les colonnes de partitionnement ne doivent pas rechercher la présence de valeurs Null.Doing this makes sure that any CHECK constraints on partitioning columns do not have to check for null values.

WITH FILLFACTOR = fillfactor WITH FILLFACTOR =fillfactor
Spécifie le remplissage par le Moteur de base de donnéesDatabase Engine des pages d’index utilisées pour stocker les données d’index.Specifies how full the Moteur de base de donnéesDatabase Engine should make each index page that is used to store the index data. Les valeurs fillfactor spécifiées par l’utilisateur doivent être comprises entre 1 et 100.User-specified fillfactor values can be from 1 through 100. Si aucune valeur n'est spécifiée, la valeur par défaut est 0.If a value is not specified, the default is 0. Les taux de remplissage 0 et 100 sont identiques en tous points.Fill factor values 0 and 100 are the same in all respects.

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é ascendante, mais ne sera plus indiquée ainsi dans les versions à venir.Documenting WITH FILLFACTOR = fillfactor as the only index option that applies to PRIMARY KEY or UNIQUE constraints is maintained for backward compatibility, but will not be documented in this manner in future releases.

column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNScolumn_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
Représente le nom du jeu de colonnes.Is the name of the column set. Un jeu de colonnes est une représentation XML non typée qui combine toutes les colonnes éparses d'une table dans une sortie structurée.A column set is an untyped XML representation that combines all of the sparse columns of a table into a structured output. Pour plus d’informations sur les jeux de colonnes, consultez Utiliser des jeux de colonnes.For more information about column sets, see Use Column Sets.

PERIOD FOR SYSTEM_TIME (system_start_time_column_name , system_end_time_column_name )PERIOD FOR SYSTEM_TIME (system_start_time_column_name , system_end_time_column_name )
S’applique à : SQL ServerSQL Server (de SQL Server 2016 (13.x)SQL Server 2016 (13.x) à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Spécifie les noms des colonnes que le système utilisera pour enregistrer la période pour laquelle un enregistrement est valide.Specifies the names of the columns that the system will use to record the period for which a record is valid. Utilisez cet argument conjointement avec les arguments GENERATED ALWAYS AS ROW { START | END } et WITH SYSTEM_VERSIONING = ON pour activer la gestion système des versions sur une table.Use this argument in conjunction with the GENERATED ALWAYS AS ROW { START | END } and WITH SYSTEM_VERSIONING = ON arguments to enable system versioning on a table. Pour plus d’informations, voir Temporal Tables.For more information, see Temporal Tables.

COMPRESSION_DELAYCOMPRESSION_DELAY
S’applique à : SQL ServerSQL Server (de SQL Server 2016 (13.x)SQL Server 2016 (13.x) à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Pour une table à mémoire optimisée, le délai spécifie le nombre minimal de minutes pendant lesquelles une ligne doit rester dans la table, inchangée, avant d’être éligible pour la compression dans l’index columnstore.For a memory-optimized, delay specifies the minimum number of minutes a row must remain in the table, unchanged, before it is eligible for compression into the columnstore index. SQL ServerSQL Server sélectionne les lignes spécifiques à compresser en fonction de l’heure de leur dernière mise à jour.selects specific rows to compress according to their last update time. Par exemple, si les lignes changent fréquemment pendant une période de deux heures, vous pouvez définir COMPRESSION_DELAY = 120 Minutes pour empêcher SQL Server de compresser une ligne avant la fin des mises à jour.For example, if rows are changing frequently during a two-hour period of time, you could set COMPRESSION_DELAY = 120 Minutes to ensure updates are completed before SQL Server compresses the row.

Pour une table sur disque, le délai spécifie le nombre minimal de minutes pendant lesquelles un rowgroup delta à l’état CLOSED doit rester dans le rowgroup delta avant que SQL ServerSQL Server puisse le compresser dans le rowgroup compressé.For a disk-based table, delay specifies the minimum number of minutes a delta rowgroup in the CLOSED state must remain in the delta rowgroup before SQL ServerSQL Server can compress it into the compressed rowgroup. Étant donné que les tables sur disque ne suivent pas les durées des opérations d’insertion et de mise à jour sur chaque ligne, SQL ServerSQL Server applique le délai aux rowgroups delta qui ont l’état CLOSED.Since disk-based tables don't track insert and update times on individual rows, SQL ServerSQL Server applies the delay to delta rowgroups in the CLOSED state.

La valeur par défaut est 0 minute.The default is 0 minutes.

Pour obtenir des recommandations concernant l’utilisation de COMPRESSION_DELAY, consultez Prise en main de Columnstore pour l’analytique opérationnelle en temps réel.For recommendations on when to use COMPRESSION_DELAY, please see Get started with Columnstore for real time operational analytics

< table_option> ::=< table_option> ::=
Spécifie une ou plusieurs options de table.Specifies one or more table options.

DATA_COMPRESSIONDATA_COMPRESSION
Spécifie l'option de compression de données pour la table, le numéro de partition ou la plage de partitions spécifiés.Specifies the data compression option for the specified table, partition number, or range of partitions. Les options disponibles sont les suivantes :The options are as follows:

AucuneNONE
La table ou les partitions spécifiées ne sont pas compressées.Table or specified partitions are not compressed.

ROWROW
La table ou les partitions spécifiées sont compressées au moyen de la compression de ligne.Table or specified partitions are compressed by using row compression.

PAGEPAGE
La table ou les partitions spécifiées sont compressées au moyen de la compression de page.Table or specified partitions are compressed by using page compression.

COLUMNSTORECOLUMNSTORE

S’applique à : SQL Server 2016 (13.x)SQL Server 2016 (13.x) à SQL Server 2017SQL Server 2017 et Azure SQL DatabaseAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL DatabaseAzure SQL Database.

S'applique uniquement aux index columnstore, y compris aux index columnstore non cluster et cluster.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE indique qu’il faut compresser avec la compression columnstore la plus performante.COLUMNSTORE specifies to compress with the most performant columnstore compression. Il s’agit de l’option généralement choisie.This is the typical choice.

COLUMNSTORE_ARCHIVECOLUMNSTORE_ARCHIVE
S’applique à : SQL ServerSQL Server (de SQL Server 2016 (13.x)SQL Server 2016 (13.x) à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

S'applique uniquement aux index columnstore, y compris aux index columnstore non cluster et cluster.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE_ARCHIVE compressera davantage la partition ou la table en une plus petite taille.COLUMNSTORE_ARCHIVE will further compress the table or partition to a smaller size. Peut être utilisé pour l'archivage, ou d'autres situations qui nécessitent moins de stockage et supportent plus de temps pour le stockage et la récupération.This can be used for archival, or for other situations that require a smaller storage size and can afford more time for storage and retrieval.

Pour plus d’informations, consultez Compression de données.For more information, see Data Compression.

ON PARTITIONS ( { <partition_number_expression> | [ , ...n ] ) ON PARTITIONS ( { <partition_number_expression> | [ ,...n ] )
Spécifie les partitions auxquelles le paramètre DATA_COMPRESSION s'applique.Specifies the partitions to which the DATA_COMPRESSION setting applies. Si la table n’est pas partitionnée, l’argument ON PARTITIONS génère une erreur.If the table is not partitioned, the ON PARTITIONS argument will generate an error. Si la clause ON PARTITIONS n’est pas fournie, l’option DATA_COMPRESSION s’applique à toutes les partitions d’une table partitionnée.If the ON PARTITIONS clause is not provided, the DATA_COMPRESSION option will apply to all partitions of a partitioned table.

partition_number_expression peut être spécifié des manières suivantes :partition_number_expression can be specified in the following ways:

  • Spécifiez le numéro de partition d’une partition, par exemple : ON PARTITIONS (2)Provide the partition number of a partition, for example: ON PARTITIONS (2)
  • Spécifiez les numéros de plusieurs partitions individuelles séparés par des virgules, par exemple : ON PARTITIONS (1, 5)Provide the partition numbers for several individual partitions separated by commas, for example: ON PARTITIONS (1, 5)
  • Spécifiez à la fois des plages et des partitions individuelles, par exemple : ON PARTITIONS (2, 4, 6 TO 8)Provide both ranges and individual partitions, for example: ON PARTITIONS (2, 4, 6 TO 8)

<range> peut être spécifié sous la forme de numéros de partitions séparés par le mot TO, par exemple : ON PARTITIONS (6 TO 8).<range> can be specified as partition numbers separated by the word TO, for example: ON PARTITIONS (6 TO 8).

Pour définir des types différents de compression de données pour des partitions différentes, spécifiez plusieurs fois l’option DATA_COMPRESSION, par exemple :To set different types of data compression for different partitions, specify the DATA_COMPRESSION option more than once, for example:

WITH
(
    DATA_COMPRESSION = NONE ON PARTITIONS (1),
    DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8),
    DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)
)

<index_option> ::=<index_option> ::=
Spécifie une ou plusieurs options d’index.Specifies one or more index options. Pour obtenir une description complète de ces options, consultez CREATE INDEX.For a complete description of these options, see CREATE INDEX.

PAD_INDEX = { ON | OFF }PAD_INDEX = { ON | OFF }
Lorsque ON est spécifié, le pourcentage d’espace disponible spécifié par FILLFACTOR est appliqué aux pages de niveau intermédiaire de l’index.When ON, the percentage of free space specified by FILLFACTOR is applied to the intermediate level pages of the index. Lorsque OFF ou une valeur FILLFACTOR n'est pas spécifié, les pages de niveau intermédiaire de l'index sont presque entièrement remplies, ce qui laisse un espace libre suffisant pour prendre en charge au moins une ligne de la taille maximale permise par l'index, en prenant en compte l'ensemble de clés sur les pages intermédiaires.When OFF or a FILLFACTOR value it not specified, the intermediate level pages are filled to near capacity leaving enough space for at least one row of the maximum size the index can have, considering the set of keys on the intermediate pages. La valeur par défaut est OFF.The default is OFF.

FILLFACTOR = fillfactor FILLFACTOR =fillfactor
Spécifie un pourcentage indiquant le taux de remplissage appliqué par le Moteur de base de donnéesDatabase Engine au niveau feuille de chaque page d'index lors de la création ou de la modification de l'index.Specifies a percentage that indicates how full the Moteur de base de donnéesDatabase Engine should make the leaf level of each index page during index creation or alteration. fillfactor doit être une valeur entière comprise entre 1 et 100.fillfactor must be an integer value from 1 to 100. La valeur par défaut est 0.The default is 0. Les taux de remplissage 0 et 100 sont identiques en tous points.Fill factor values 0 and 100 are the same in all respects.

IGNORE_DUP_KEY = { ON | OFF }IGNORE_DUP_KEY = { ON | OFF }
Spécifie la réponse d'erreur lorsqu'une opération d'insertion essaie d'insérer des valeurs de clés en double dans un index unique.Specifies the error response when an insert operation attempts to insert duplicate key values into a unique index. L'option IGNORE_DUP_KEY s'applique uniquement aux opérations d'insertion après la création ou la régénération de l'index.The IGNORE_DUP_KEY option applies only to insert operations after the index is created or rebuilt. Cette option n’a aucun effet lors de l’exécution de CREATE INDEX, d’ALTER INDEX ou d’UPDATE.The option has no effect when executing CREATE INDEX, ALTER INDEX, or UPDATE. La valeur par défaut est OFF.The default is OFF.

ONON
Un message d'avertissement s'affichera lorsque des valeurs de clé en double sont insérées dans un index unique.A warning message will occur when duplicate key values are inserted into a unique index. Seules les lignes qui violent la contrainte d'unicité échouent.Only the rows violating the uniqueness constraint will fail.

OFFOFF
Un message d'erreur s'affichera lorsque des valeurs de clé en double sont insérées dans un index unique.An error message will occur when duplicate key values are inserted into a unique index. L'intégralité de l'opération INSERT sera restaurée.The entire INSERT operation will be rolled back.

IGNORE_DUP_KEY ne peut pas être défini sur ON pour les index créés sur une vue, les index non uniques, les index XML, les index spatiaux et les index filtrés.IGNORE_DUP_KEY cannot be set to ON for indexes created on a view, non-unique indexes, XML indexes, spatial indexes, and filtered indexes.

Pour voir IGNORE_DUP_KEY, utilisez sys.indexes.To view IGNORE_DUP_KEY, use sys.indexes.

Dans la syntaxe à compatibilité descendante, WITH IGNORE_DUP_KEY équivaut à WITH IGNORE_DUP_KEY = ON.In backward compatible syntax, WITH IGNORE_DUP_KEY is equivalent to WITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = { ON | OFF }STATISTICS_NORECOMPUTE = { ON | OFF }
Lorsque la valeur spécifiée est ON, les statistiques d’index périmées ne sont pas recalculées automatiquement.When ON, out-of-date index statistics are not automatically recomputed. Lorsque la valeur spécifiée est OFF, la mise à jour automatique des statistiques est activée.When OFF, automatic statistics updating are enabled. La valeur par défaut est OFF.The default is OFF.

ALLOW_ROW_LOCKS = { ON | OFF }ALLOW_ROW_LOCKS = { ON | OFF }
Si la valeur est ON, les verrous de ligne sont autorisés lorsque vous accédez à l’index.When ON, row locks are allowed when you access the index. Le Moteur de base de donnéesDatabase Engine détermine le moment où les verrous de ligne sont utilisés.The Moteur de base de donnéesDatabase Engine determines when row locks are used. Si la valeur est OFF, les verrous de ligne ne sont pas utilisés.When OFF, row locks are not used. La valeur par défaut est ON.The default is ON.

ALLOW_PAGE_LOCKS = { ON | OFF }ALLOW_PAGE_LOCKS = { ON | OFF }
Si la valeur est ON, les verrous de page sont autorisés lorsque vous accédez à l’index.When ON, page locks are allowed when you access the index. Le Moteur de base de donnéesDatabase Engine détermine le moment où les verrous de page sont utilisés.The Moteur de base de donnéesDatabase Engine determines when page locks are used. Si la valeur est OFF, les verrous de page ne sont pas utilisés.When OFF, page locks are not used. La valeur par défaut est ON.The default is ON.

OPTIMIZE_FOR_SEQUENTIAL_KEY = {ON | OFF } s’applique à : SQL Server 2019SQL Server 2019 et versions ultérieures.OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF } Applies to: SQL Server 2019SQL Server 2019 and later.
Spécifie s’il faut optimiser ou pas la contention d’insertion de la dernière page.Specifies whether or not to optimize for last-page insert contention. La valeur par défaut est OFF.The default is OFF. Consultez la section clés séquentielles de la page CREATE INDEX pour plus d’informations.See the Sequential Keys section of the CREATE INDEX page for more information.

FILETABLE_DIRECTORY = directory_nameFILETABLE_DIRECTORY = directory_name

S’applique à: SQL ServerSQL Server (deSQL Server 2012 (11.x)SQL Server 2012 (11.x) à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

Spécifie le nom de répertoire FileTable compatible Windows.Specifies the windows-compatible FileTable directory name. Ce nom doit être unique parmi tous les noms de répertoire FileTable de la base de données.This name should be unique among all the FileTable directory names in the database. La comparaison d'unicité n'est pas sensible à la casse, indépendamment des paramètres de classement.Uniqueness comparison is case-insensitive, regardless of collation settings. Si cette valeur n'est pas spécifiée, le nom de la table de fichiers est utilisé.If this value is not specified, the name of the filetable is used.

FILETABLE_COLLATE_FILENAME = { collation_name | database_default }FILETABLE_COLLATE_FILENAME = { collation_name | database_default }

S’applique à: SQL ServerSQL Server (deSQL Server 2012 (11.x)SQL Server 2012 (11.x) à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017). Azure SQL DatabaseAzure SQL Database ne prend pas en charge FILETABLE.does not support FILETABLE.

Spécifie le nom du classement à appliquer à la colonne Name du FileTable.Specifies the name of the collation to be applied to the Name column in the FileTable. Le classement ne doit pas être sensible à la casse pour des raisons de conformité à la sémantique d'attribution des noms de fichiers Windows.The collation must be case-insensitive to comply with Windows file naming semantics. Si cette valeur n'est pas spécifiée, le classement par défaut de la base de données est utilisé.If this value is not specified, the database default collation is used. Si le classement par défaut de la base de données respecte la casse, une erreur est générée et l'opération CREATE TABLE échoue.If the database default collation is case-sensitive, an error is raised and the CREATE TABLE operation fails.

collation_name collation_name
Nom d’un classement non sensible à la casse.The name of a case-insensitive collation.

database_defaultdatabase_default
Spécifie que le classement par défaut de la base de données doit être utilisé.Specifies that the default collation for the database should be used. Ce classement ne doit pas être sensible à la casse.This collation must be case-insensitive.

FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name
S’applique à: SQL ServerSQL Server (deSQL Server 2012 (11.x)SQL Server 2012 (11.x) à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

Spécifie le nom à utiliser pour la contrainte de clé primaire qui est créée automatiquement sur le FileTable.Specifies the name to be used for the primary key constraint that is automatically created on the FileTable. Si cette valeur n'est pas spécifiée, le système génère un nom pour la contrainte.If this value is not specified, the system generates a name for the constraint.

FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name
S’applique à: SQL ServerSQL Server (deSQL Server 2012 (11.x)SQL Server 2012 (11.x) à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

Spécifie le nom à utiliser pour la contrainte unique qui est créée automatiquement sur la colonne stream_id dans le FileTable.Specifies the name to be used for the unique constraint that is automatically created on the stream_id column in the FileTable. Si cette valeur n'est pas spécifiée, le système génère un nom pour la contrainte.If this value is not specified, the system generates a name for the constraint.

FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name
S’applique à: SQL ServerSQL Server (deSQL Server 2012 (11.x)SQL Server 2012 (11.x) à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

Spécifie le nom à utiliser pour la contrainte unique qui est créée automatiquement sur les colonnes parent_path_locator et name dans le FileTable.Specifies the name to be used for the unique constraint that is automatically created on the parent_path_locator and name columns in the FileTable. Si cette valeur n'est pas spécifiée, le système génère un nom pour la contrainte.If this value is not specified, the system generates a name for the constraint.

SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name .history_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name .history_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]
S’applique à : SQL ServerSQL Server (de SQL Server 2016 (13.x)SQL Server 2016 (13.x) à SQL Server 2017SQL Server 2017 et Azure SQL DatabaseAzure SQL Database).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL DatabaseAzure SQL Database).

Active la gestion système des versions de la table si le type de données, les contraintes de possibilité de valeur Null et les spécifications de contrainte de clé primaire sont satisfaits.Enables system versioning of the table if the datatype, nullability constraint, and primary key constraint requirements are met. Si l’argument HISTORY_TABLE n’est pas utilisé, le système génère une nouvelle table d’historique qui correspond au schéma de la table actuelle dans le même groupe de fichiers que la table actuelle, créant un lien entre les deux tables. Ainsi, le système peut enregistrer l’historique de chaque enregistrement dans la table actuelle dans la table d’historique.If the HISTORY_TABLE argument is not used, the system generates a new history table matching the schema of the current table in the same filegroup as the current table, creating a link between the two tables and enables the system to record the history of each record in the current table in the history table. Le nom de cette table d’historique sera MSSQL_TemporalHistoryFor<primary_table_object_id>.The name of this history table will be MSSQL_TemporalHistoryFor<primary_table_object_id>. Par défaut, la table d’historique est PAGE compressée.By default, the history table is PAGE compressed. Si l’argument HISTORY_TABLE est utilisé pour créer un lien vers une table d’historique existante et pour utiliser cette table, le lien est créé entre la table actuelle et la table spécifiée.If the HISTORY_TABLE argument is used to create a link to and use an existing history table, the link is created between the current table and the specified table. Si la table actuelle est partitionnée, la table d’historique est créée sur le groupe de fichiers par défaut car la configuration du partitionnement n’est pas répliquée automatiquement de la table actuelle dans la table d’historique.If current table is partitioned, the history table is created on default file group because partitioning configuration is not replicated automatically from the current table to the history table. Si le nom d’une table d’historique est spécifié lors de sa création, vous devez spécifier le nom du schéma et de la table.If the name of a history table is specified during history table creation, you must specify the schema and table name. Lorsque vous créez un lien vers une table de l’historique existante, vous pouvez choisir d’effectuer une vérification de cohérence des données.When creating a link to an existing history table, you can choose to perform a data consistency check. Cette vérification de cohérence des données garantit que les enregistrements existants ne se chevauchent pas.This data consistency check ensures that existing records do not overlap. La vérification de cohérence des données est effectuée par défaut.Performing the data consistency check is the default. Utilisez cet argument conjointement avec les arguments PERIOD FOR SYSTEM_TIME et GENERATED ALWAYS AS ROW { START | END } pour activer la gestion système des versions sur une table.Use this argument in conjunction with the PERIOD FOR SYSTEM_TIME and GENERATED ALWAYS AS ROW { START | END } arguments to enable system versioning on a table. Pour plus d’informations, voir Temporal Tables.For more information, see Temporal Tables.

REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [,...n] ) ] | OFF ( MIGRATION_STATE = PAUSED ) }REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [,...n] ) ] | OFF ( MIGRATION_STATE = PAUSED ) }
S’applique à: SQL ServerSQL Server (deSQL Server 2016 (13.x)SQL Server 2016 (13.x) à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017).

Crée la nouvelle table avec Stretch Database activé ou désactivé.Creates the new table with Stretch Database enabled or disabled. Pour plus d'informations, consultez Stretch Database.For more info, see Stretch Database.

Activation de Stretch Database pour une tableEnabling Stretch Database for a table

Lorsque vous activez Stretch pour une table en spécifiant ON, vous pouvez éventuellement spécifier MIGRATION_STATE = OUTBOUND pour commencer à migrer les données immédiatement, ou MIGRATION_STATE = PAUSED pour reporter la migration des données.When you enable Stretch for a table by specifying ON, you can optionally specify MIGRATION_STATE = OUTBOUND to begin migrating data immediately, or MIGRATION_STATE = PAUSED to postpone data migration. La valeur par défaut est MIGRATION_STATE = OUTBOUND.The default value is MIGRATION_STATE = OUTBOUND. Pour plus d’informations sur l’activation de Stretch pour une table, consultez Activer Stretch Database pour une table.For more info about enabling Stretch for a table, see Enable Stretch Database for a table.

Conditions préalables.Prerequisites. Avant d’activer Stretch pour une table, vous devez l’activer sur le serveur et sur la base de données.Before you enable Stretch for a table, you have to enable Stretch on the server and on the database. Pour plus d'informations, consultez Enable Stretch Database for a database.For more info, see Enable Stretch Database for a database.

Les autorisations.Permissions. L’activation de Stretch pour une table ou une base de données nécessite les autorisations db_owner.Enabling Stretch for a database or a table requires db_owner permissions. L’activation de Stretch pour une table nécessite également des autorisations ALTER sur la table.Enabling Stretch for a table also requires ALTER permissions on the table.

[ FILTER_PREDICATE = { null | predicate } ][ FILTER_PREDICATE = { null | predicate } ]
S’applique à: SQL ServerSQL Server (deSQL Server 2016 (13.x)SQL Server 2016 (13.x) à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017).

Spécifie éventuellement un prédicat de filtre pour sélectionner des lignes à migrer à partir d’une table qui contient des données historiques et actuelles.Optionally specifies a filter predicate to select rows to migrate from a table that contains both historical and current data. Le prédicat doit appeler une fonction table inline déterministe.The predicate must call a deterministic inline table-valued function. Pour plus d’informations, consultez Activer Stretch Database pour une table et Sélectionner les lignes à migrer à l’aide d’une fonction de filtre.For more info, see Enable Stretch Database for a table and Select rows to migrate by using a filter function.

Important

Si vous fournissez un prédicat de filtre qui fonctionne mal, la migration des données fonctionne mal également.If you provide a filter predicate that performs poorly, data migration also performs poorly. Stretch Database applique le prédicat de filtre à la table à l’aide de l’opérateur CROSS APPLY.Stretch Database applies the filter predicate to the table by using the CROSS APPLY operator.

Si vous ne spécifiez aucun prédicat de filtre, la table entière est migrée.If you don't specify a filter predicate, the entire table is migrated.

Quand vous spécifiez un prédicat de filtre, vous devez également spécifier MIGRATION_STATE.When you specify a filter predicate, you also have to specify MIGRATION_STATE.

MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }
S’applique à : SQL ServerSQL Server (de SQL Server 2016 (13.x)SQL Server 2016 (13.x) à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

  • Spécifiez OUTBOUND pour migrer des données de SQL ServerSQL Server vers Azure SQL DatabaseAzure SQL Database.Specify OUTBOUND to migrate data from SQL ServerSQL Server to Azure SQL DatabaseAzure SQL Database.

  • Spécifiez INBOUND pour copier les données distantes pour la table de Azure SQL DatabaseAzure SQL Database vers SQL ServerSQL Server, et pour désactiver Stretch pour la table.Specify INBOUND to copy the remote data for the table from Azure SQL DatabaseAzure SQL Database back to SQL ServerSQL Server and to disable Stretch for the table. Pour plus d’informations, consultez Désactiver Stretch Database et récupérer les données distantes.For more info, see Disable Stretch Database and bring back remote data.

    Cette opération entraîne des coûts de transfert de données et ne peut pas être annulée.This operation incurs data transfer costs, and it can't be canceled.

  • Spécifiez PAUSED pour interrompre ou reporter la migration des données.Specify PAUSED to pause or postpone data migration. Pour plus d’informations, consultez Suspension et reprise de la migration de données - Stretch Database.For more info, see Pause and resume data migration -Stretch Database.

MEMORY_OPTIMIZEDMEMORY_OPTIMIZED
S’applique à : SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) à SQL Server 2017SQL Server 2017 et Azure SQL DatabaseAzure SQL Database).Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL DatabaseAzure SQL Database). L’instance managée Azure SQL DatabaseAzure SQL Database ne prend pas en charge les tables à mémoire optimisée.Azure SQL DatabaseAzure SQL Database managed instance does not support memory optimized tables.

La valeur ON indique que la table est à mémoire optimisée.The value ON indicates that the table is memory optimized. Les tables à mémoire optimisée font partie de la fonctionnalité OLTP en mémoire, qui sert à optimisé les performances de traitement des transactions.Memory-optimized tables are part of the In-Memory OLTP feature, which is used to optimized the performance of transaction processing. Pour bien démarrer avec OLTP en mémoire, consultez Démarrage rapide 1 : technologies OLTP en mémoire pour accélérer les performances Transact-SQL.To get started with In-Memory OLTP see Quick Start 1: In-Memory OLTP Technologies for Faster Transact-SQL Performance. Pour plus d’informations sur les tables à mémoire optimisée, consultez Tables optimisées en mémoire.For more in-depth information about memory-optimized tables see Memory-Optimized Tables.

La valeur par défaut OFF indique qu’il s’agit d’une table sur disque.The default value OFF indicates that the table is disk-based.

DURABILITYDURABILITY
S’applique à : SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

La valeur de SCHEMA_AND_DATA indique que la table est durable, ce qui signifie que les modifications sont rendues persistantes sur disque et survivent au redémarrage ou au basculement.The value of SCHEMA_AND_DATA indicates that the table is durable, meaning that changes are persisted on disk and survive restart or failover. SCHEMA_AND_DATA est la valeur par défaut.SCHEMA_AND_DATA is the default value.

La valeur de SCHEMA_ONLY indique que la table est une table non durable.The value of SCHEMA_ONLY indicates that the table is non-durable. Le schéma de la table est conservé mais aucune mise à jour des données n’est conservée lors du redémarrage ou du basculement de la base de données.The table schema is persisted but any data updates are not persisted upon a restart or failover of the database. DURABILITY = SCHEMA_ONLY est uniquement autorisé avec MEMORY_OPTIMIZED = ON.DURABILITY = SCHEMA_ONLY is only allowed with MEMORY_OPTIMIZED = ON.

Avertissement

Quand une table est créée avec DURABILITY = SCHEMA_ONLY et que READ_COMMITTED_SNAPSHOT est changé par la suite à l’aide d’ALTER DATABASE, les données de la table sont perdues.When a table is created with DURABILITY = SCHEMA_ONLY, and READ_COMMITTED_SNAPSHOT is subsequently changed using ALTER DATABASE, data in the table will be lost.

BUCKET_COUNTBUCKET_COUNT
S’applique à : SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) à SQL Server 2017SQL Server 2017 et Azure SQL DatabaseAzure SQL Database).Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL DatabaseAzure SQL Database.

Indique le nombre de compartiments qui doivent être créés dans l'index de hachage.Indicates the number of buckets that should be created in the hash index. La valeur maximale de BUCKET_COUNT dans les index de hachage est de 1 073 741 824.The maximum value for BUCKET_COUNT in hash indexes is 1,073,741,824. Pour plus d’informations sur le nombre de compartiments, consultez Index sur des tables optimisées en mémoire.For more information about bucket counts, see Indexes for Memory-Optimized Tables.

Bucket_count est un argument obligatoire.Bucket_count is a required argument.

INDEX S’applique à : SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.INDEX Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database).

Vous pouvez spécifier les index de table et de colonne dans le cadre de l’instruction CREATE TABLE.Column and table indexes can be specified as part of the CREATE TABLE statement. Pour plus d’informations sur l’ajout et la suppression d’index sur des tables à mémoire optimisée, consultez : Modification des tables optimisées en mémoireFor details about adding and removing indexes on memory-optimized tables see: Altering Memory-Optimized Tables

HASHHASH
S’applique à : SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Indique qu'un index HASH est créé.Indicates that a HASH index is created.

Les index de hachage sont pris en charge uniquement sur les tables mémoire optimisées.Hash indexes are supported only on memory-optimized tables.

NotesRemarks

Pour plus d’informations sur le nombre de tables, colonnes, contraintes et index autorisés, consultez Spécifications des capacités maximales pour SQL Server.For information about the number of allowed tables, columns, constraints and indexes, see Maximum Capacity Specifications for SQL Server.

L'espace est généralement alloué aux tables et aux index par incréments d'une valeur d'extension à la fois.Space is generally allocated to tables and indexes in increments of one extent at a time. Quand l’option SET MIXED_PAGE_ALLOCATION de ALTER DATABASE a la valeur TRUE, ou toujours avant SQL Server 2016 (13.x)SQL Server 2016 (13.x), quand une table ou un index est créé, des pages lui sont allouées à partir d’extensions mixtes jusqu’à ce qu’il ou elle ait suffisamment de pages pour remplir une extension uniforme.When the SET MIXED_PAGE_ALLOCATION option of ALTER DATABASE is set to TRUE, or always prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x), when a table or index is created, it is allocated pages from mixed extents until it has enough pages to fill a uniform extent. Quand il y a assez de pages pour remplir une extension uniforme, une autre extension est allouée chaque fois que l'extension active est pleine.After it has enough pages to fill a uniform extent, another extent is allocated every time the currently allocated extents become full. Pour obtenir des informations sur la quantité d’espace allouée et utilisée par une table, exécutez sp_spaceused.For a report about the amount of space allocated and used by a table, execute sp_spaceused.

Le Moteur de base de donnéesDatabase Engine ne garantit pas l'application de l'ordre dans lequel des contraintes DEFAULT, IDENTITY, ROWGUIDCOL, ou des contraintes de colonne, sont spécifiées dans une définition de colonne.The Moteur de base de donnéesDatabase Engine does not enforce an order in which DEFAULT, IDENTITY, ROWGUIDCOL, or column constraints are specified in a column definition.

Lors de la création d'une table, l'option QUOTED IDENTIFIER est toujours stockée avec la valeur ON dans les métadonnées de la table, même si elle a la valeur OFF au moment de sa création.When a table is created, the QUOTED IDENTIFIER option is always stored as ON in the metadata for the table, even if the option is set to OFF when the table is created.

Tables temporairesTemporary Tables

Vous pouvez créer des tables temporaires locales et globales.You can create local and global temporary tables. Les tables temporaires locales ne peuvent être vues que dans la session active ; les tables temporaires globales sont accessibles dans toutes les sessions.Local temporary tables are visible only in the current session, and global temporary tables are visible to all sessions. Les tables temporaires ne peuvent pas être partitionnées.Temporary tables cannot be partitioned.

Faites précéder les noms de tables temporaires locales d’un signe dièse (#table_name), et les noms de tables temporaires globales de deux signes dièse (##table_name).Prefix local temporary table names with single number sign (#table_name), and prefix global temporary table names with a double number sign (##table_name).

Les instructions Transact-SQLTransact-SQL référencent une table temporaire à l’aide de la valeur spécifiée pour table_name dans l’instruction CREATE TABLE, par exemple :Transact-SQLTransact-SQL statements reference the temporary table by using the value specified for table_name in the CREATE TABLE statement, for example:

CREATE TABLE #MyTempTable (
  col1 INT PRIMARY KEY
);

INSERT INTO #MyTempTable 
VALUES (1);

Si plusieurs tables temporaires sont créées dans un lot ou une seule procédure stockée, elles doivent porter des noms différents.If more than one temporary table is created inside a single stored procedure or batch, they must have different names.

Si vous incluez une valeur schema_name lorsque vous créez ou accédez à une table temporaire, cette valeur est ignorée.If you include a schema_name when you create or access a temporary table, it is ignored. Toutes les tables temporaires sont créées dans le schéma dbo.All temporary tables are created in the dbo schema.

Si vous créez une table temporaire locale dans une procédure stockée ou dans une application qui peut être exécutée en même temps par plusieurs utilisateurs, le Moteur de base de donnéesDatabase Engine doit être capable de distinguer les tables créées par les différents utilisateurs.If a local temporary table is created in a stored procedure or application that can be executed at the same time by several users, the Moteur de base de donnéesDatabase Engine must be able to distinguish the tables created by the different users. Cela est effectué en interne par le Moteur de base de donnéesDatabase Engine en ajoutant de manière interne un suffixe numérique à chaque nom de table temporaire locale.The Moteur de base de donnéesDatabase Engine does this by internally appending a numeric suffix to each local temporary table name. Le nom complet d’une table temporaire, tel qu’il est stocké dans la table sysobjects de tempdb, est constitué du nom de table spécifié dans l’instruction CREATE TABLE et du suffixe numérique généré par le système.The full name of a temporary table as stored in the sysobjects table in tempdb is made up of the table name specified in the CREATE TABLE statement and the system-generated numeric suffix. Pour laisser assez de place au suffixe, le table_name spécifié pour un nom de table temporaire locale ne doit pas dépasser 116 caractères.To allow for the suffix, table_name specified for a local temporary name cannot exceed 116 characters.

Les tables temporaires sont automatiquement supprimées lorsqu'elles passent hors de portée, sauf si elles sont supprimées explicitement à l'aide de DROP TABLE :Temporary tables are automatically dropped when they go out of scope, unless explicitly dropped by using DROP TABLE:

  • Une table temporaire locale créée dans une procédure stockée est supprimée automatiquement lorsque la procédure stockée est terminée.A local temporary table created in a stored procedure is dropped automatically when the stored procedure is finished. La table peut être référencée par des procédures stockées imbriquées exécutées par la procédure stockée qui a créé la table.The table can be referenced by any nested stored procedures executed by the stored procedure that created the table. La table ne peut pas être référencée par le processus qui a appelé la procédure stockée ayant créé la table.The table cannot be referenced by the process that called the stored procedure that created the table.
  • Toutes les autres tables temporaires locales sont supprimées automatiquement à la fin de la session active.All other local temporary tables are dropped automatically at the end of the current session.
  • Les tables temporaires globales sont supprimées automatiquement lorsque la session qui a créé la table se termine, et que toutes les autres tâches n'y font plus référence.Global temporary tables are automatically dropped when the session that created the table ends and all other tasks have stopped referencing them. L'association entre une tâche et une table n'est assurée que pendant la durée d'une seule instruction Transact-SQLTransact-SQL.The association between a task and a table is maintained only for the life of a single Transact-SQLTransact-SQL statement. Cela signifie qu'une table temporaire globale est supprimée à la fin de la dernière instruction Transact-SQLTransact-SQL qui faisait activement référence à la table lorsque la session de création s'est terminée.This means that a global temporary table is dropped at the completion of the last Transact-SQLTransact-SQL statement that was actively referencing the table when the creating session ended.

Une table temporaire locale créée au sein d'une procédure stockée ou d'un déclencheur peut avoir le même nom qu'une table temporaire créée avant l'appel de la procédure stockée ou du déclencheur.A local temporary table created within a stored procedure or trigger can have the same name as a temporary table that was created before the stored procedure or trigger is called. Cependant, si une requête fait référence à une table temporaire et si deux tables temporaires portent ce nom, la table par rapport à laquelle la requête est résolue n'est pas définie.However, if a query references a temporary table and two temporary tables with the same name exist at that time, it is not defined which table the query is resolved against. Les procédures stockées imbriquées peuvent également créer des tables temporaires portant le même nom qu'une table temporaire créée par la procédure stockée qui l'a appelée.Nested stored procedures can also create temporary tables with the same name as a temporary table that was created by the stored procedure that called it. Cependant, pour que les modifications résolvent la table créée par la procédure imbriquée, la table doit avoir la même structure, avec les mêmes noms de colonnes, que la table créée dans la procédure d'appel.However, for modifications to resolve to the table that was created in the nested procedure, the table must have the same structure, with the same column names, as the table created in the calling procedure. Cela est illustré par l'exemple suivant.This is shown in the following example.

CREATE PROCEDURE dbo.Test2
AS
    CREATE TABLE #t(x INT PRIMARY KEY);
    INSERT INTO #t VALUES (2);
    SELECT Test2Col = x FROM #t;
GO

CREATE PROCEDURE dbo.Test1
AS
    CREATE TABLE #t(x INT PRIMARY KEY);
    INSERT INTO #t VALUES (1);
    SELECT Test1Col = x FROM #t;
 EXEC Test2;
GO

CREATE TABLE #t(x INT PRIMARY KEY);
INSERT INTO #t VALUES (99);
GO

EXEC Test1;
GO

Voici l'ensemble des résultats.Here is the result set.

(1 row(s) affected)
Test1Col
-----------
1

(1 row(s) affected)
 Test2Col
 -----------
 2

Quand vous créez des tables temporaires locales ou globales, la syntaxe CREATE TABLE prend en charge les définitions de contraintes à l’exception des contraintes FOREIGN KEY.When you create local or global temporary tables, the CREATE TABLE syntax supports constraint definitions except for FOREIGN KEY constraints. Si vous spécifiez une contrainte FOREIGN KEY dans une table temporaire, l'instruction retourne un message d'avertissement précisant que la contrainte a été ignorée.If a FOREIGN KEY constraint is specified in a temporary table, the statement returns a warning message that states the constraint was skipped. La table est toujours créée mais sans les contraintes FOREIGN KEY.The table is still created without the FOREIGN KEY constraints. Les tables temporaires ne peuvent pas être référencées dans des contraintes FOREIGN KEY.Temporary tables cannot be referenced in FOREIGN KEY constraints.

Si une table temporaire est créée avec une contrainte nommée et dans l'étendue d'une transaction définie par l'utilisateur, un seul utilisateur à la fois peut exécuter l'instruction qui crée la table temp.If a temporary table is created with a named constraint and the temporary table is created within the scope of a user-defined transaction, only one user at a time can execute the statement that creates the temp table. Par exemple, si une procédure stockée crée une table temporaire avec une contrainte nommée de clé primaire, elle ne peut pas être exécutée simultanément par plusieurs utilisateurs.For example, if a stored procedure creates a temporary table with a named primary key constraint, the stored procedure cannot be executed simultaneously by multiple users.

Tables temporaires globales délimitées à la base de données (Azure SQL Database)Database scoped global temporary tables (Azure SQL Database)

Les tables temporaires globales pour SQL ServerSQL Server (dont le nom de table commence par ##) sont stockées dans tempdb et partagées entre les sessions de tous les utilisateurs dans toute l’instance SQL ServerSQL Server.Global temporary tables for SQL ServerSQL Server (initiated with ## table name) are stored in tempdb and shared among all users' sessions across the whole SQL ServerSQL Server instance. Pour plus d’informations sur les types de tables SQL, consultez la section ci-dessus sur CREATE TABLE.For information on SQL table types, see the above section on Create Tables.

Azure SQL DatabaseAzure SQL Database prend en charge les tables temporaires globales qui sont également stockées dans tempdb et dont l’étendue est limitée à la base de données.supports global temporary tables that are also stored in tempdb and scoped to the database level. Cela signifie que les tables temporaires globales sont partagées pour les sessions de tous les utilisateurs au sein de la même Azure SQL DatabaseAzure SQL Database.This means that global temporary tables are shared for all users' sessions within the same Azure SQL DatabaseAzure SQL Database. Les sessions utilisateur d’autres instances de bases de données n’ont pas accès aux tables temporaires globales.User sessions from other databases cannot access global temporary tables.

Les tables temporaires globales pour Azure SQL DatabaseAzure SQL Database suivent la même syntaxe et la même sémantique que celles utilisées par SQL ServerSQL Server pour les tables temporaires.Global temporary tables for Azure SQL DatabaseAzure SQL Database follow the same syntax and semantics that SQL ServerSQL Server uses for temporary tables. De même, les procédures stockées temporaires globales sont également délimitées à la base de données dans Azure SQL DatabaseAzure SQL Database.Similarly, global temporary stored procedures are also scoped to the database level in Azure SQL DatabaseAzure SQL Database. Les tables temporaires locales (dont le nom de table commence par #) sont également prises en charge pour Azure SQL DatabaseAzure SQL Database et suivent la même syntaxe et la même sémantique que celles utilisées par SQL ServerSQL Server.Local temporary tables (initiated with # table name) are also supported for Azure SQL DatabaseAzure SQL Database and follow the same syntax and semantics that SQL ServerSQL Server uses. Consultez la section ci-dessus sur les Tables temporaires.See the above section on Temporary Tables.

Important

Cette fonctionnalité est disponible pour Azure SQL DatabaseAzure SQL Database.This feature is available for Azure SQL DatabaseAzure SQL Database.

Dépannage des tables temporaires globales pour Azure SQL DatabaseTroubleshooting global temporary tables for Azure SQL Database

Pour résoudre les problèmes liés à tempdb, consultez Comment analyser l’utilisation de tempdb.For the troubleshooting the tempdb, see How to Monitor tempdb use.

Notes

Seul un administrateur de serveur peut accéder aux DMV de dépannage dans Azure SQL DatabaseAzure SQL Database.Only a server admin can access the troubleshooting DMVs in Azure SQL DatabaseAzure SQL Database.

AutorisationsPermissions

Tout utilisateur peut créer des objets temporaires globaux.Any user can create global temporary objects. Les utilisateurs n'ont accès qu'aux objets qu'ils possèdent, sauf s'ils ont reçu des autorisations supplémentaires.Users can only access their own objects, unless they receive additional permissions.

tables partitionnées ;Partitioned tables

Avant de créer une table partitionnée à l'aide de CREATE TABLE, vous devez d'abord créer une fonction de partition pour spécifier la manière dont la table est partitionnée.Before creating a partitioned table by using CREATE TABLE, you must first create a partition function to specify how the table becomes partitioned. Une fonction de partition est créée à l’aide de CREATE PARTITION FUNCTION.A partition function is created by using CREATE PARTITION FUNCTION. Ensuite, vous devez créer un schéma de partition pour spécifier les groupes de fichiers qui contiendront les partitions indiquées par la fonction de partition.Second, you must create a partition scheme to specify the filegroups that will hold the partitions indicated by the partition function. Un schéma de partition est créé à l’aide de CREATE PARTITION SCHEME.A partition scheme is created by using CREATE PARTITION SCHEME. Le placement des contraintes PRIMARY KEY ou UNIQUE pour séparer les groupes de fichiers ne peut pas être spécifié pour les tables partitionnées.Placement of PRIMARY KEY or UNIQUE constraints to separate filegroups cannot be specified for partitioned tables. Pour plus d’informations, consultez Tables et index partitionnés.For more information, see Partitioned Tables and Indexes.

Contraintes PRIMARY KEYPRIMARY KEY Constraints

  • Une table ne peut contenir qu'une seule contrainte PRIMARY KEY.A table can contain only one PRIMARY KEY constraint.

  • L'index généré par une contrainte PRIMARY KEY ne peut avoir pour conséquence une augmentation du nombre d'index dans la table à plus de 999 index non cluster et un index cluster.The index generated by a PRIMARY KEY constraint cannot cause the number of indexes on the table to exceed 999 nonclustered indexes and 1 clustered index.

  • Si vous ne spécifiez pas CLUSTERED ou NONCLUSTERED pour une contrainte PRIMARY KEY, CLUSTERED est utilisé s'il n'y a pas d'index cluster spécifiés pour les contraintes UNIQUE.If CLUSTERED or NONCLUSTERED is not specified for a PRIMARY KEY constraint, CLUSTERED is used if there are no clustered indexes specified for UNIQUE constraints.

  • Toutes les colonnes définies dans une contrainte PRIMARY KEY doivent avoir la valeur NOT NULL.All columns defined within a PRIMARY KEY constraint must be defined as NOT NULL. Si vous ne spécifiez pas la possibilité ou non de valeurs NULL, toutes les colonnes participant à une contrainte PRIMARY KEY sont définies à NOT NULL.If nullability is not specified, all columns participating in a PRIMARY KEY constraint have their nullability set to NOT NULL.

    Notes

    Pour les tables à mémoire optimisée, la colonne clé autorisant la valeur NULL est autorisée.For memory-optimized tables, the NULLable key column is allowed.

  • Si une clé primaire est définie sur une colonne avec le type de données CLR défini par l'utilisateur, l'implémentation du type doit prendre en charge le tri binaire.If a primary key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. Pour plus d’informations, consultez Types CLR définis par l’utilisateur.For more information, see CLR User-Defined Types.

Contraintes UNIQUEUNIQUE Constraints

  • Si vous ne spécifiez pas CLUSTERED ou NONCLUSTERED pour une contrainte UNIQUE, NONCLUSTERED est utilisé par défaut.If CLUSTERED or NONCLUSTERED is not specified for a UNIQUE constraint, NONCLUSTERED is used by default.
  • Chaque contrainte UNIQUE génère un index.Each UNIQUE constraint generates an index. Le nombre de contraintes UNIQUE ne peut avoir pour conséquence une augmentation du nombre d'index dans la table à plus de 999 index non cluster et 1 index cluster.The number of UNIQUE constraints cannot cause the number of indexes on the table to exceed 999 nonclustered indexes and 1 clustered index.
  • Si une contrainte unique est définie sur une colonne avec le type de données CLR défini par l'utilisateur, l'implémentation du type doit prendre en charge le tri binaire ou basé sur l'opérateur.If a unique constraint is defined on a CLR user-defined type column, the implementation of the type must support binary or operator-based ordering. Pour plus d’informations, consultez Types CLR définis par l’utilisateur.For more information, see CLR User-Defined Types.

Contraintes FOREIGN KEYFOREIGN KEY Constraints

  • Lorsqu'une valeur différente de NULL est entrée dans la colonne d'une contrainte FOREIGN KEY, la valeur doit exister dans la colonne référencée. Dans le cas contraire, le système retourne un message d'erreur signalant une violation de clé étrangère.When a value other than NULL is entered into the column of a FOREIGN KEY constraint, the value must exist in the referenced column; otherwise, a foreign key violation error message is returned.

  • Les contraintes FOREIGN KEY sont appliquées à la colonne précédente, à moins que des colonnes sources ne soient spécifiées.FOREIGN KEY constraints are applied to the preceding column, unless source columns are specified.

  • Les contraintes FOREIGN KEY ne peuvent faire référence qu'à des tables au sein de la même base de données sur le même serveur.FOREIGN KEY constraints can reference only tables within the same database on the same server. L'intégrité référentielle inter-base de données doit être implémentée via les déclencheurs.Cross-database referential integrity must be implemented through triggers. Pour plus d’informations, consultez CREATE TRIGGER.For more information, see CREATE TRIGGER.

  • Les contraintes FOREIGN KEY peuvent faire référence à une autre colonne dans la même table.FOREIGN KEY constraints can reference another column in the same table. On appelle habituellement ce mécanisme « auto-référence ».This is referred to as a self-reference.

  • La clause REFERENCES d'une contrainte FOREIGN KEY au niveau des colonnes, ne peut lister qu'une colonne de référence.The REFERENCES clause of a column-level FOREIGN KEY constraint can list only one reference column. Cette colonne doit avoir le même type de données que la colonne pour laquelle la contrainte est définie.This column must have the same data type as the column on which the constraint is defined.

  • La clause REFERENCES d'une contrainte FOREIGN KEY de niveau table doit avoir le même nombre de colonnes de référence que le nombre de colonnes de la liste des colonnes de la contrainte.The REFERENCES clause of a table-level FOREIGN KEY constraint must have the same number of reference columns as the number of columns in the constraint column list. Le type de données de chaque colonne de référence doit également être identique à la colonne de référence correspondante dans la liste des colonnes.The data type of each reference column must also be the same as the corresponding column in the column list.

  • La valeur CASCADE, SET NULL ou SET DEFAULT ne peut pas être spécifiée si une colonne de type timestamp fait partie de la clé étrangère ou de la clé référencée.CASCADE, SET NULL or SET DEFAULT cannot be specified if a column of type timestamp is part of either the foreign key or the referenced key.

  • Il est possible de combiner CASCADE, SET NULL, SET DEFAULT et NO ACTION pour des tables liées par des relations référentielles.CASCADE, SET NULL, SET DEFAULT and NO ACTION can be combined on tables that have referential relationships with each other. Si le moteur Moteur de base de donnéesDatabase Engine rencontre NO ACTION, il s’interrompt et restaure les actions CASCADE, SET NULL et SET DEFAULT.If the Moteur de base de donnéesDatabase Engine encounters NO ACTION, it stops and rolls back related CASCADE, SET NULL and SET DEFAULT actions. Lorsqu'une instruction DELETE génère une combinaison d'actions CASCADE, SET NULL, SET DEFAULT et NO ACTION, les actions CASCADE, SET NULL et SET DEFAULT sont appliquées par le Moteur de base de donnéesDatabase Engine avant toute recherche de NO ACTION.When a DELETE statement causes a combination of CASCADE, SET NULL, SET DEFAULT and NO ACTION actions, all the CASCADE, SET NULL and SET DEFAULT actions are applied before the Moteur de base de donnéesDatabase Engine checks for any NO ACTION.

  • Le Moteur de base de donnéesDatabase Engine n'a pas de limite prédéfinie du nombre de contraintes FOREIGN KEY qu'une table peut contenir et qui référencent d'autres tables ou du nombre de contraintes FOREIGN KEY possédées par d'autres tables qui font référence à une table spécifique.The Moteur de base de donnéesDatabase Engine does not have a predefined limit on either the number of FOREIGN KEY constraints a table can contain that reference other tables, or the number of FOREIGN KEY constraints that are owned by other tables that reference a specific table.

    Cependant, le nombre réel de contraintes FOREIGN KEY qui peuvent être utilisées est limité par la configuration matérielle et par la conception de la base de données et de l'application.Nevertheless, the actual number of FOREIGN KEY constraints that can be used is limited by the hardware configuration and by the design of the database and application. Nous vous recommandons de ne pas insérer plus de 253 contraintes FOREIGN KEY dans une table et qu'une même table ne soit pas référencée par plus de 253 contraintes FOREIGN KEY.We recommend that a table contain no more than 253 FOREIGN KEY constraints, and that it be referenced by no more than 253 FOREIGN KEY constraints. La limite effective pour vous peut varier en fonction de l'application et du matériel.The effective limit for you may be more or less depending on the application and hardware. Prenez en compte le coût d'application des contraintes FOREIGN KEY avant de concevoir vos bases de données et applications.Consider the cost of enforcing FOREIGN KEY constraints when you design your database and applications.

  • Les contraintes FOREIGN KEY ne sont pas appliquées dans les tables temporaires.FOREIGN KEY constraints are not enforced on temporary tables.

  • Les contraintes FOREIGN KEY ne peuvent référencer que les colonnes dans des contraintes PRIMARY KEY ou UNIQUE dans la table référencée ou dans un index UNIQUE INDEX de la table référencée.FOREIGN KEY constraints can reference only columns in PRIMARY KEY or UNIQUE constraints in the referenced table or in a UNIQUE INDEX on the referenced table.

  • Si une clé étrangère est définie sur une colonne avec le type de données CLR défini par l'utilisateur, l'implémentation du type doit prendre en charge le tri binaire.If a foreign key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. Pour plus d’informations, consultez Types CLR définis par l’utilisateur.For more information, see CLR User-Defined Types.

  • Les colonnes participant à une relation de clé étrangère doivent être définies avec la même longueur et la même échelle.Columns participating in a foreign key relationship must be defined with the same length and scale.

définitions DEFAULTDEFAULT definitions

  • Une colonne ne peut avoir qu'une seule définition DEFAULT (valeur par défaut).A column can have only one DEFAULT definition.

  • Une définition DEFAULT peut contenir des valeurs constantes, des fonctions, des fonctions niladiques SQL standard ou des valeurs NULL.A DEFAULT definition can contain constant values, functions, SQL standard niladic functions, or NULL. Le tableau suivant montre les fonctions niladiques et les valeurs qu'elles retournent pour la valeur par défaut, lors d'une instruction INSERT.The following table shows the niladic functions and the values they return for the default during an INSERT statement.

    Fonction niladique SQL-92SQL-92 niladic function Valeur retournéeValue returned
    CURRENT_TIMESTAMPCURRENT_TIMESTAMP Date et heure actuelles.Current date and time.
    CURRENT_USERCURRENT_USER Nom de l'utilisateur effectuant une insertion.Name of user performing an insert.
    SESSION_USERSESSION_USER Nom de l'utilisateur effectuant une insertion.Name of user performing an insert.
    SYSTEM_USERSYSTEM_USER Nom de l'utilisateur effectuant une insertion.Name of user performing an insert.
    UtilisateurUSER Nom de l'utilisateur effectuant une insertion.Name of user performing an insert.
  • constant_expression dans une définition DEFAULT ne peut pas faire référence à une autre colonne de la table, ou à d’autres tables, vues ou procédures stockées.constant_expression in a DEFAULT definition cannot refer to another column in the table, or to other tables, views, or stored procedures.

  • Les définitions DEFAULT ne peuvent pas être créées dans des colonnes ayant un type de données timestamp ou une propriété IDENTITY.DEFAULT definitions cannot be created on columns with a timestamp data type or columns with an IDENTITY property.

  • Les définitions DEFAULT ne peuvent pas être créées pour des colonnes qui possèdent des types de données d'alias, si ces types de données sont liés à un objet par défaut.DEFAULT definitions cannot be created for columns with alias data types if the alias data type is bound to a default object.

Contraintes CHECKCHECK Constraints

  • Une colonne peut posséder un nombre illimité de contraintes CHECK et la condition peut inclure plusieurs expressions logiques combinées par AND et OR.A column can have any number of CHECK constraints, and the condition can include multiple logical expressions combined with AND and OR. S'il existe plusieurs contraintes CHECK pour une même colonne, elles sont validées dans l'ordre de leur création.Multiple CHECK constraints for a column are validated in the order they are created.

  • La condition de recherche doit correspondre à une expression booléenne et ne peut pas faire référence à une autre table.The search condition must evaluate to a Boolean expression and cannot reference another table.

  • Une contrainte CHECK de niveau colonne ne peut faire référence qu'à la colonne contenant la contrainte, et une contrainte CHECK de niveau table ne peut faire référence qu'aux colonnes d'une même table.A column-level CHECK constraint can reference only the constrained column, and a table-level CHECK constraint can reference only columns in the same table.

    Les contraintes CHECK et les règles servent toutes les deux à valider les données lors des instructions INSERT et UPDATE.CHECK CONSTRAINTS and rules serve the same function of validating the data during INSERT and UPDATE statements.

  • Quand il existe une règle et une ou plusieurs contraintes CHECK pour une colonne, toutes les restrictions sont évaluées.When a rule and one or more CHECK constraints exist for a column or columns, all restrictions are evaluated.

  • Les contraintes CHECK ne peuvent pas être définies sur des colonnes text, ntext ou image.CHECK constraints cannot be defined on text, ntext, or image columns.

Informations supplémentaires sur les contraintesAdditional Constraint information

  • Un index créé pour une contrainte ne peut pas être supprimé en utilisant DROP INDEX ; la contrainte doit être supprimée à l'aide de ALTER TABLE.An index created for a constraint cannot be dropped by using DROP INDEX; the constraint must be dropped by using ALTER TABLE. Un index créé pour une contrainte et utilisé par elle peut être recréé en utilisant ALTER INDEX ... REBUILD.An index created for and used by a constraint can be rebuilt by using ALTER INDEX ... REBUILD. Pour plus d’informations, consultez Réorganiser et reconstruire des index.For more information, see Reorganize and Rebuild Indexes.
  • Les noms de contrainte doivent suivre les règles des identificateurs, sauf que le nom ne peut pas commencer par un signe dièse (#).Constraint names must follow the rules for identifiers, except that the name cannot start with a number sign (#). Si constraint_name n’est pas spécifié, un nom généré par le système est affecté à la contrainte.If constraint_name is not supplied, a system-generated name is assigned to the constraint. Le nom de la contrainte apparaît dans tous les messages d'erreur relatifs aux violations de contraintes.The constraint name appears in any error message about constraint violations.
  • Quand il y a une violation de contrainte dans une instruction INSERT, UPDATE ou DELETE, l’exécution de l’instruction est arrêtée.When a constraint is violated in an INSERT, UPDATE, or DELETE statement, the statement is ended. Cependant, si SET XACT_ABORT a la valeur OFF, et que l’instruction fait partie d’une transaction explicite, la transaction continue de s’exécuter.However, when SET XACT_ABORT is set to OFF, the transaction, if the statement is part of an explicit transaction, continues to be processed. Si SET XACT_ABORT a la valeur ON, toute la transaction est annulée.When SET XACT_ABORT is set to ON, the whole transaction is rolled back. Vous pouvez également utiliser l’instruction ROLLBACK TRANSACTION avec la définition de la transaction en vérifiant la fonction système @@ERROR.You can also use the ROLLBACK TRANSACTION statement with the transaction definition by checking the @@ERROR system function.
  • Si ALLOW_ROW_LOCKS = ON et ALLOW_PAGE_LOCK = ON, les verrous au niveau de la ligne, de la page et de la table sont autorisés au moment où vous accédez à l’index.When ALLOW_ROW_LOCKS = ON and ALLOW_PAGE_LOCK = ON, row-, page-, and table-level locks are allowed when you access the index. Le Moteur de base de donnéesDatabase Engine choisit le verrou approprié et peut promouvoir un verrou de ligne ou de page en verrou de table.The Moteur de base de donnéesDatabase Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock. Si ALLOW_ROW_LOCKS = OFF et ALLOW_PAGE_LOCK = OFF, seul un verrou au niveau de la table est autorisé au moment où vous accédez à l’index.When ALLOW_ROW_LOCKS = OFF and ALLOW_PAGE_LOCK = OFF, only a table-level lock is allowed when you access the index.
  • Si une table contient des contraintes FOREIGN KEY ou CHECK, et des déclencheurs, les conditions de la contrainte sont évaluées avant l'exécution du déclencheur.If a table has FOREIGN KEY or CHECK CONSTRAINTS and triggers, the constraint conditions are evaluated before the trigger is executed.

Pour obtenir des informations sur une table et ses colonnes, utilisez sp_help ou sp_helpconstraint.For a report on a table and its columns, use sp_help or sp_helpconstraint. Pour renommer une table, utilisez sp_rename.To rename a table, use sp_rename. Pour obtenir un rapport sur les vues et procédures stockées qui dépendent d’une table, utilisez sys.dm_sql_referenced_entities et sys.dm_sql_referencing_entities.For a report on the views and stored procedures that depend on a table, use sys.dm_sql_referenced_entities and sys.dm_sql_referencing_entities.

Règles des possibilités de valeurs Null dans une définition de tableNullability rules within a table definition

La possibilité de valeurs Null pour une colonne détermine si cette colonne peut accepter une valeur Null (NULL) comme données dans la colonne.The nullability of a column determines whether that column can allow a null value (NULL) as the data in that column. La valeur NULL n’est pas équivalente à la valeur zéro ou à un blanc : cela signifie qu’il n’y a pas eu d’entrée dans la colonne ou que la valeur NULL explicite a été spécifiée. Cela implique généralement que la valeur est inconnue ou non applicable.NULL is not zero or blank: NULL means no entry was made or an explicit NULL was supplied, and it typically implies that the value is either unknown or not applicable.

Quand vous utilisez CREATE TABLE ou ALTER TABLE pour créer ou modifier une table, les paramètres de la base de données et de la session influencent et éventuellement modifient la possibilité de valeur NULL pour le type de données utilisé dans une définition de colonne.When you use CREATE TABLE or ALTER TABLE to create or alter a table, database and session settings influence and possibly override the nullability of the data type that is used in a column definition. Il est recommandé de toujours définir explicitement une colonne comme NULL ou NOT NULL ou, si vous utilisez un type de données défini par l'utilisateur, d'autoriser la colonne à utiliser la possibilité de valeur NULL par défaut pour ce type de données.We recommend that you always explicitly define a column as NULL or NOT NULL for noncomputed columns or, if you use a user-defined data type, that you allow the column to use the default nullability of the data type. Les colonnes éparses doivent toujours autoriser les valeurs NULL.Sparse columns must always allow NULL.

Lorsque vous ne l'avez pas spécifiée explicitement, la possibilité de valeurs Null pour les colonnes respecte les règles récapitulées dans le tableau suivant :When column nullability is not explicitly specified, column nullability follows the rules shown in the following table.

Type de données de la colonneColumn data type RègleRule
Type de données d'aliasAlias data type Le Moteur de base de donnéesDatabase Engine utilise la possibilité de valeurs Null spécifiée lors de la création du type de données.The Moteur de base de donnéesDatabase Engine uses the nullability that is specified when the data type was created. Utilisez sp_help pour obtenir la possibilité de valeurs Null par défaut du type de données.To determine the default nullability of the data type, use sp_help.
type CLR défini par l'utilisateurCLR user-defined type La possibilité de valeur NULL est déterminée en fonction de la définition de la colonne.Nullability is determined according to the column definition.
Type de données fourni par le systèmeSystem-supplied data type Si le type de données fourni par le système ne possède qu'une option, il a priorité.If the system-supplied data type has only one option, it takes precedence. Les types de données timestamp doivent être NOT NULL.timestamp data types must be NOT NULL. Lorsque les paramètres de session ont pour valeur ON en utilisant SET :When any session settings are set ON by using SET:
ANSI_NULL_DFLT_ON = ON, NULL est affecté.ANSI_NULL_DFLT_ON = ON, NULL is assigned.
ANSI_NULL_DFLT_OFF = ON, NOT NULL est affecté.ANSI_NULL_DFLT_OFF = ON, NOT NULL is assigned.

Lorsque les paramètres de base de données sont configurés en utilisant ALTER DATABASE :When any database settings are configured by using ALTER DATABASE:
ANSI_NULL_DEFAULT_ON = ON, NULL est affecté.ANSI_NULL_DEFAULT_ON = ON, NULL is assigned.
ANSI_NULL_DEFAULT_OFF = ON, NOT NULL est affecté.ANSI_NULL_DEFAULT_OFF = ON, NOT NULL is assigned.

Pour voir le paramètre de la base de données pour ANSI_NULL_DEFAULT, utilisez la vue de catalogue sys.databases.To view the database setting for ANSI_NULL_DEFAULT, use the sys.databases catalog view

Si aucune des options ANSI_NULL_DFLT n’est définie pour la session et si la base de données est définie avec les valeurs par défaut (ANSI_NULL_DEFAULT est OFF), la valeur par défaut, NOT NULL, est affectée.When neither of the ANSI_NULL_DFLT options is set for the session and the database is set to the default (ANSI_NULL_DEFAULT is OFF), the default of NOT NULL is assigned.

La possibilité de valeurs NULL dans les colonnes calculées est déterminée automatiquement par le Moteur de base de donnéesDatabase Engine.If the column is a computed column, its nullability is always automatically determined by the Moteur de base de donnéesDatabase Engine. Pour déterminer si ce type de colonne accepte ou non les valeurs NULL, utilisez la fonction COLUMNPROPERTY avec la propriété AllowsNull.To find out the nullability of this type of column, use the COLUMNPROPERTY function with the AllowsNull property.

Notes

Que ce soit pour le pilote ODBC de SQL Server ou le pilote OLE DB de SQL Server, ANSI_NULL_DFLT_ON a la valeur ON par défaut.The SQL Server ODBC driver and SQL Server OLE DB driver both default to having ANSI_NULL_DFLT_ON set to ON. Les utilisateurs ODBC et OLE DB peuvent réaliser cette configuration dans les sources de données ODBC ou à l'aide d'attributs ou de propriétés de connexion définies par l'application.ODBC and OLE DB users can configure this in ODBC data sources, or with connection attributes or properties set by the application.

Data CompressionData Compression

Les tables système ne peuvent pas être activées pour la compression.System tables cannot be enabled for compression. Lorsque vous créez une table ou un index, la compression de données est définie sur NONE, sauf indication contraire.When you are creating a table, data compression is set to NONE, unless specified otherwise. Si vous spécifiez une liste de partitions ou une partition hors limites, une erreur est générée.If you specify a list of partitions or a partition that is out of range, an error will be generated. Pour plus d’informations sur la compression de données, consultez Compression des données.For a more information about data compression, see Data Compression.

Pour évaluer la façon dont la modification de l’état de compression affecte une table, un index ou une partition, utilisez la procédure stockée sp_estimate_data_compression_savings .To evaluate how changing the compression state will affect a table, an index, or a partition, use the sp_estimate_data_compression_savings stored procedure.

AutorisationsPermissions

Nécessite l’autorisation CREATE TABLE dans la base de données et l’autorisation ALTER sur le schéma dans lequel la table est créée.Requires CREATE TABLE permission in the database and ALTER permission on the schema in which the table is being created.

Si des colonnes dans l’instruction CREATE TABLE sont définies avec un type de données défini par l’utilisateur, une autorisation REFERENCES est nécessaire sur ce type.If any columns in the CREATE TABLE statement are defined to be of a user-defined type, REFERENCES permission on the user-defined type is required.

Si des colonnes dans l’instruction CREATE TABLE sont définies avec le type de données CLR défini par l’utilisateur, la propriété du type ou l’autorisation REFERENCES est nécessaire.If any columns in the CREATE TABLE statement are defined to be of a CLR user-defined type, either ownership of the type or REFERENCES permission on it is required.

Si des colonnes dans l’instruction CREATE TABLE sont associées à une collection de schémas XML, la propriété de la collection de schémas XML ou l’autorisation REFERENCES est nécessaire.If any columns in the CREATE TABLE statement have an XML schema collection associated with them, either ownership of the XML schema collection or REFERENCES permission on it is required.

Tous les utilisateurs peuvent créer des tables temporaires dans tempdb.Any user can create temporary tables in tempdb.

ExemplesExamples

A.A. Créer une contrainte PRIMARY KEY dans une colonneCreate a PRIMARY KEY constraint on a column

L'exemple suivant affiche la définition de colonne pour une contrainte PRIMARY KEY avec un index cluster sur la colonne EmployeeID de la table Employee.The following example shows the column definition for a PRIMARY KEY constraint with a clustered index on the EmployeeID column of the Employee table. Étant donné que le nom de la contrainte n'est pas spécifié, le système en fournit un.Because a constraint name is not specified, the system supplies the constraint name.

CREATE TABLE dbo.Employee (EmployeeID int
PRIMARY KEY CLUSTERED);

B.B. Utilisation des contraintes FOREIGN KEYUsing FOREIGN KEY constraints

Une contrainte FOREIGN KEY sert à référencer une autre table.A FOREIGN KEY constraint is used to reference another table. Les clés étrangères peuvent être des clés à colonne unique ou sur plusieurs colonnes.Foreign keys can be single-column keys or multicolumn keys. Cet exemple montre une contrainte FOREIGN KEY à colonne unique dans la table SalesOrderHeader qui fait référence à la table SalesPerson.This following example shows a single-column FOREIGN KEY constraint on the SalesOrderHeader table that references the SalesPerson table. Seule la clause REFERENCES est obligatoire pour une contrainte FOREIGN KEY à colonne unique.Only the REFERENCES clause is required for a single-column FOREIGN KEY constraint.

SalesPersonID int NULL
REFERENCES SalesPerson(SalesPersonID)

Vous pouvez également utiliser de manière explicite la clause FOREIGN KEY et redéterminer l'attribut de la colonne.You can also explicitly use the FOREIGN KEY clause and restate the column attribute. Notez que le nom de la colonne ne doit pas nécessairement être le même dans les deux tables.Note that the column name does not have to be the same in both tables.

FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(SalesPersonID)

Les contraintes de clés sur plusieurs colonnes sont créées comme des contraintes de table.Multicolumn key constraints are created as table constraints. Dans la base de données AdventureWorks2012AdventureWorks2012, la table SpecialOfferProduct inclut une clause PRIMARY KEY sur plusieurs colonnes.In the AdventureWorks2012AdventureWorks2012 database, the SpecialOfferProduct table includes a multicolumn PRIMARY KEY. L'exemple suivant montre comment faire référence à cette clé à partir d'une autre table ; un nom de contrainte explicite n'est pas obligatoire.The following example shows how to reference this key from another table; an explicit constraint name is optional.

CONSTRAINT FK_SpecialOfferProduct_SalesOrderDetail FOREIGN KEY
 (ProductID, SpecialOfferID)
REFERENCES SpecialOfferProduct (ProductID, SpecialOfferID)

C.C. Utilisation des contraintes UNIQUEUsing UNIQUE constraints

Les contraintes UNIQUE servent à garantir l'unicité dans les colonnes qui n'ont pas de clés primaires.UNIQUE constraints are used to enforce uniqueness on nonprimary key columns. L'exemple suivant applique la restriction suivant laquelle la colonne Name de la table Product doit être unique.The following example enforces a restriction that the Name column of the Product table must be unique.

Name nvarchar(100) NOT NULL
UNIQUE NONCLUSTERED

D.D. Utilisation des définitions DEFAULTUsing DEFAULT definitions

Les valeurs par défaut fournissent une valeur (avec les instructions INSERT et UPDATE) lorsqu'aucune valeur n'est fournie.Defaults supply a value (with the INSERT and UPDATE statements) when no value is supplied. Par exemple, la base de données AdventureWorks2012AdventureWorks2012 peut inclure une table de correspondance répertoriant les différents emplois que les employés peuvent occuper dans la société.For example, the AdventureWorks2012AdventureWorks2012 database could include a lookup table listing the different jobs employees can fill in the company. Sous une colonne décrivant chaque emploi, une chaîne de caractères par défaut peut fournir une description lorsqu'aucune description réelle n'est entrée explicitement.Under a column that describes each job, a character string default could supply a description when an actual description is not entered explicitly.

DEFAULT 'New Position - title not formalized yet'

Outre des constantes, les définitions DEFAULT peuvent inclure des fonctions.In addition to constants, DEFAULT definitions can include functions. Utilisez l'exemple suivant pour obtenir la date actuelle d'une entrée.Use the following example to get the current date for an entry.

DEFAULT (getdate())

Une fonction niladique peut également améliorer l'intégrité des données.A niladic-function scan can also improve data integrity. Afin de garder une trace de l'utilisateur qui a inséré une ligne, utilisez la fonction niladique pour USER.To keep track of the user that inserted a row, use the niladic-function for USER. N'entourez pas les fonctions niladiques de parenthèses.Do not enclose the niladic-functions with parentheses.

DEFAULT USER

E.E. Utilisation des contraintes CHECKUsing CHECK constraints

L'exemple suivant affiche une restriction appliquée aux valeurs entrées dans la colonne CreditRating de la table Vendor.The following example shows a restriction made to values that are entered into the CreditRating column of the Vendor table. La contrainte n'a pas de nom.The constraint is unnamed.

CHECK (CreditRating >= 1 and CreditRating <= 5)

Cet exemple montre une contrainte nommée avec un modèle de restriction pour les données caractères entrées dans une colonne d'une table.This example shows a named constraint with a pattern restriction on the character data entered into a column of a table.

CONSTRAINT CK_emp_id CHECK (emp_id LIKE
'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]'
OR emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]')

Cet exemple spécifie que les valeurs doivent figurer dans une liste spécifique ou suivre un modèle donné.This example specifies that the values must be within a specific list or follow a specified pattern.

CHECK (emp_id IN ('1389', '0736', '0877', '1622', '1756')
OR emp_id LIKE '99[0-9][0-9]')

F.F. Affichage des définitions de tables complètesShowing the complete table definition

Cet exemple montre des définitions complètes de tables avec toutes les définitions de contraintes pour la table PurchaseOrderDetail créée dans la base de données AdventureWorks2012AdventureWorks2012.The following example shows the complete table definitions with all constraint definitions for table PurchaseOrderDetail created in the AdventureWorks2012AdventureWorks2012 database. Notez que pour exécuter l'exemple, le schéma de table est modifié en dbo.Note that to run the sample, the table schema is changed to dbo.

CREATE TABLE dbo.PurchaseOrderDetail
(
    PurchaseOrderID int NOT NULL
        REFERENCES Purchasing.PurchaseOrderHeader(PurchaseOrderID),
    LineNumber smallint NOT NULL,
    ProductID int NULL
        REFERENCES Production.Product(ProductID),
    UnitPrice money NULL,
    OrderQty smallint NULL,
    ReceivedQty float NULL,
    RejectedQty float NULL,
    DueDate datetime NULL,
    rowguid uniqueidentifier ROWGUIDCOL NOT NULL
        CONSTRAINT DF_PurchaseOrderDetail_rowguid DEFAULT (newid()),
    ModifiedDate datetime NOT NULL
        CONSTRAINT DF_PurchaseOrderDetail_ModifiedDate DEFAULT (getdate()),
    LineTotal AS ((UnitPrice*OrderQty)),
    StockedQty AS ((ReceivedQty-RejectedQty)),
    CONSTRAINT PK_PurchaseOrderDetail_PurchaseOrderID_LineNumber
               PRIMARY KEY CLUSTERED (PurchaseOrderID, LineNumber)
               WITH (IGNORE_DUP_KEY = OFF)
)
ON PRIMARY;

G.G. Création d'une table avec une colonne XML de type collection de schémas XMLCreating a table with an xml column typed to an XML schema collection

L'exemple suivant crée une table avec une colonne xml de type collection de schémas XML HRResumeSchemaCollection.The following example creates a table with an xml column that is typed to XML schema collection HRResumeSchemaCollection. Le mot clé DOCUMENT spécifie que chaque instance du type de données xml dans column_name ne peut contenir qu’un seul élément de niveau supérieur.The DOCUMENT keyword specifies that each instance of the xml data type in column_name can contain only one top-level element.

CREATE TABLE HumanResources.EmployeeResumes
   (LName nvarchar(25), FName nvarchar(25),
    Resume xml( DOCUMENT HumanResources.HRResumeSchemaCollection) );

H.H. Création d'une table partitionnéeCreating a partitioned table

L'exemple suivant crée une fonction de partition pour partitionner une table ou un index en quatre partitions.The following example creates a partition function to partition a table or index into four partitions. L'exemple crée ensuite un schéma de partition pour spécifier les groupes de fichiers qui contiendront chacune des quatre partitions.Then, the example creates a partition scheme that specifies the filegroups in which to hold each of the four partitions. Enfin, l'exemple crée une table qui utilise le schéma de partition.Finally, the example creates a table that uses the partition scheme. Cet exemple suppose que les groupes de fichiers existent déjà dans la base de données.This example assumes the filegroups already exist in the database.

CREATE PARTITION FUNCTION myRangePF1 (int)
    AS RANGE LEFT FOR VALUES (1, 100, 1000) ;
GO

CREATE PARTITION SCHEME myRangePS1
    AS PARTITION myRangePF1
    TO (test1fg, test2fg, test3fg, test4fg) ;
GO  
  
CREATE TABLE PartitionTable (col1 int, col2 char(10))
    ON myRangePS1 (col1) ;
GO

En fonction des valeurs de la colonne col1 de PartitionTable, les partitions sont affectées des manières suivantes.Based on the values of column col1 of PartitionTable, the partitions are assigned in the following ways.

Groupe de fichiersFilegroup test1fgtest1fg test2fgtest2fg test3fgtest3fg test4fgtest4fg
PartitionPartition 11 22 33 44
ValeursValues col 1 <= 1col 1 <= 1 col1 > 1 AND col1 <= 100col1 > 1 AND col1 <= 100 col1 > 100 AND col1 <= 1,000col1 > 100 AND col1 <= 1,000 col1 > 1000col1 > 1000

I.I. Utilisation du type de données uniqueidentifier dans une colonneUsing the uniqueidentifier data type in a column

L'exemple suivant crée une table avec une colonne uniqueidentifier.The following example creates a table with a uniqueidentifier column. Il utilise une contrainte PRIMARY KEY pour empêcher les utilisateurs de la table d'insérer des doublons, et la fonction NEWSEQUENTIALID() dans la contrainte DEFAULT pour fournir des valeurs aux nouvelles lignes.The example uses a PRIMARY KEY constraint to protect the table against users inserting duplicated values, and it uses the NEWSEQUENTIALID() function in the DEFAULT constraint to provide values for new rows. La propriété ROWGUIDCOL est appliquée à la colonne uniqueidentifier de sorte qu'elle peut être référencée en utilisant le mot clé $ROWGUID.The ROWGUIDCOL property is applied to the uniqueidentifier column so that it can be referenced using the $ROWGUID keyword.

CREATE TABLE dbo.Globally_Unique_Data
    (guid uniqueidentifier
        CONSTRAINT Guid_Default DEFAULT
        NEWSEQUENTIALID() ROWGUIDCOL,
    Employee_Name varchar(60)
    CONSTRAINT Guid_PK PRIMARY KEY (guid) );

J.J. Utilisation d'une expression pour une colonne calculéeUsing an expression for a computed column

L'exemple suivant illustre l'utilisation d'une expression ((low + high)/2) pour le calcul de la colonne calculée myavg.The following example shows the use of an expression ((low + high)/2) for calculating the myavg computed column.

CREATE TABLE dbo.mytable
    ( low int, high int, myavg AS (low + high)/2 ) ;

K.K. Création d'une colonne calculée basée sur une colonne de type défini par l'utilisateurCreating a computed column based on a user-defined type column

L'exemple suivant crée une table, avec une colonne définie comme utf8string dont le type de données est défini par l'utilisateur, en supposant que l'assembly du type et le type lui-même ont déjà été créés dans la base de données active.The following example creates a table with one column defined as user-defined type utf8string, assuming that the type's assembly, and the type itself, have already been created in the current database. Une seconde colonne est définie d’après utf8string et utilise la méthode ToString() de type(class) utf8string pour calculer une valeur pour la colonne.A second column is defined based on utf8string, and uses method ToString() of type(class)utf8string to compute a value for the column.

CREATE TABLE UDTypeTable
    ( u utf8string, ustr AS u.ToString() PERSISTED ) ;

L.L. Utilisation de la fonction USER_NAME pour une colonne calculéeUsing the USER_NAME function for a computed column

L'exemple suivant utilise la fonction USER_NAME() dans la colonne myuser_name.The following example uses the USER_NAME() function in the myuser_name column.

CREATE TABLE dbo.mylogintable
    ( date_in datetime, user_id int, myuser_name AS USER_NAME() ) ;

M.M. Création d'une table qui comporte une colonne FILESTREAMCreating a table that has a FILESTREAM column

L'exemple suivant crée une table qui comporte une colonne FILESTREAM Photo.The following example creates a table that has a FILESTREAM column Photo. Si une table comporte une un ou plusieurs colonnes FILESTREAM, elle doit aussi comporter une colonne ROWGUIDCOL.If a table has one or more FILESTREAM columns, the table must have one ROWGUIDCOL column.

CREATE TABLE dbo.EmployeePhoto
    (
     EmployeeId int NOT NULL PRIMARY KEY
    ,Photo varbinary(max) FILESTREAM NULL
    ,MyRowGuidColumn uniqueidentifier NOT NULL ROWGUIDCOL
        UNIQUE DEFAULT NEWID()
    );

N.N. Création d'une table qui utilise la compression de ligneCreating a table that uses row compression

L'exemple suivant crée une table qui utilise la compression de ligne.The following example creates a table that uses row compression.

CREATE TABLE dbo.T1
(c1 int, c2 nvarchar(200) )
WITH (DATA_COMPRESSION = ROW);

Pour obtenir d’autres exemples de compression de données, consultez Compression de données.For additional data compression examples, see Data Compression.

O.O. Création d'une table qui comporte des colonnes éparses et un jeu de colonnesCreating a table that has sparse columns and a column set

Les exemples suivants montrent comment créer une table qui comporte une colonne éparse et une table qui comporte deux colonnes éparses et un jeu de colonnes.The following examples show to how to create a table that has a sparse column, and a table that has two sparse columns and a column set. Ces exemples utilisent la syntaxe de base.The examples use the basic syntax. Pour obtenir des exemples plus complexes, consultez Utiliser des colonnes éparses et Utiliser des jeux de colonnes.For more complex examples, see Use Sparse Columns and Use Column Sets.

Cet exemple crée une table qui comporte une colonne éparse.This example creates a table that has a sparse column.

CREATE TABLE dbo.T1
    (c1 int PRIMARY KEY,
    c2 varchar(50) SPARSE NULL ) ;

Cet exemple crée une table qui comporte deux colonnes éparses et un jeu de colonnes nommé CSet.This example creates a table that has two sparse columns and a column set named CSet.

CREATE TABLE T1
    (c1 int PRIMARY KEY,
    c2 varchar(50) SPARSE NULL,
    c3 int SPARSE NULL,
    CSet XML COLUMN_SET FOR ALL_SPARSE_COLUMNS ) ;

P.P. Création d’une table temporelle sur disque avec version systèmeCreating a system-versioned disk-based temporal table

S’applique à: SQL Server 2016 (13.x)SQL Server 2016 (13.x) jusqu’à SQL Server 2017SQL Server 2017 et Azure SQL DatabaseAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL DatabaseAzure SQL Database.

Les exemples suivants montrent comment créer une table temporelle liée à une nouvelle table d’historique, et comment créer une table temporelle liée à une table d’historique existante.The following examples show how to create a temporal table linked to a new history table, and how to create a temporal table linked to an existing history table. Notez que la table temporelle doit avoir une clé primaire définie pour que la table puisse être activée pour la gestion système des versions.Note that the temporal table must have a primary key defined to be enabled for the table to be enabled for system versioning. Pour obtenir des exemples montrant comment ajouter ou supprimer la gestion système des versions sur une table existante, consultez Gestion système des versions dans Exemples.For examples showing how to add or remove system versioning on an existing table, see System Versioning in Examples. Pour plus d’informations sur les cas d’usage, consultez Tables temporelles.For use cases, see Temporal Tables.

Cet exemple crée une table temporelle liée à une nouvelle table d’historique.This example creates a new temporal table linked to a new history table.

CREATE TABLE Department
(
    DepartmentNumber char(10) NOT NULL PRIMARY KEY CLUSTERED,
    DepartmentName varchar(50) NOT NULL,
    ManagerID int NULL,
    ParentDepartmentNumber char(10) NULL,
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH (SYSTEM_VERSIONING = ON);

Cet exemple crée une table temporelle liée à une table d’historique existante.This example creates a new temporal table linked to an existing history table.

--Existing table
CREATE TABLE Department_History
(
    DepartmentNumber char(10) NOT NULL,
    DepartmentName varchar(50) NOT NULL,
    ManagerID int NULL,
    ParentDepartmentNumber char(10) NULL,
    SysStartTime datetime2 NOT NULL,
    SysEndTime datetime2 NOT NULL
);
--Temporal table
CREATE TABLE Department
(
    DepartmentNumber char(10) NOT NULL PRIMARY KEY CLUSTERED,
    DepartmentName varchar(50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber char(10) NULL,
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH
    (SYSTEM_VERSIONING = ON
        (HISTORY_TABLE = dbo.Department_History, DATA_CONSISTENCY_CHECK = ON )
    );

Q.Q. Création d’une table temporelle à mémoire optimisée avec version systèmeCreating a system-versioned memory-optimized temporal table

S’applique à: SQL Server 2016 (13.x)SQL Server 2016 (13.x) jusqu’à SQL Server 2017SQL Server 2017 et Azure SQL DatabaseAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL DatabaseAzure SQL Database.

L’exemple suivant montre comment créer une table temporelle à mémoire optimisée avec version système liée à une nouvelle table d’historique sur disque.The following example shows how to create a system-versioned memory-optimized temporal table linked to a new disk-based history table.

Cet exemple crée une table temporelle liée à une nouvelle table d’historique.This example creates a new temporal table linked to a new history table.

CREATE SCHEMA History
GO
CREATE TABLE dbo.Department
(
    DepartmentNumber char(10) NOT NULL PRIMARY KEY NONCLUSTERED,
    DepartmentName varchar(50) NOT NULL,
    ManagerID int NULL,
    ParentDepartmentNumber char(10) NULL,
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH
    (
        MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA,
            SYSTEM_VERSIONING = ON ( HISTORY_TABLE = History.DepartmentHistory )
    );

Cet exemple crée une table temporelle liée à une table d’historique existante.This example creates a new temporal table linked to an existing history table.

--Existing table
CREATE TABLE Department_History
(
    DepartmentNumber char(10) NOT NULL,
    DepartmentName varchar(50) NOT NULL,
    ManagerID int NULL,
    ParentDepartmentNumber char(10) NULL,
    SysStartTime datetime2 NOT NULL,
    SysEndTime datetime2 NOT NULL
);
--Temporal table
CREATE TABLE Department
(
    DepartmentNumber char(10) NOT NULL PRIMARY KEY CLUSTERED,
    DepartmentName varchar(50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber char(10) NULL,
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH
    (SYSTEM_VERSIONING = ON
        (HISTORY_TABLE = dbo.Department_History, DATA_CONSISTENCY_CHECK = ON )
    );

R.R. Création d’une table avec colonnes chiffréesCreating a table with encrypted columns

L’exemple suivant crée une table avec deux colonnes chiffrées.The following example creates a table with two encrypted columns. Pour plus d’informations, consultez Always Encrypted.For more information, see Always Encrypted.

CREATE TABLE Customers (
    CustName nvarchar(60)
        ENCRYPTED WITH
            (
             COLUMN_ENCRYPTION_KEY = MyCEK,
             ENCRYPTION_TYPE = RANDOMIZED,
             ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
            ),
    SSN varchar(11) COLLATE Latin1_General_BIN2
        ENCRYPTED WITH
            (
             COLUMN_ENCRYPTION_KEY = MyCEK,
             ENCRYPTION_TYPE = DETERMINISTIC ,
             ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
            ),
    Age int NULL
);

S.S. Créer un index filtré inlineCreate an inline filtered index

Crée une table avec un index filtré inline.Creates a table with an inline filtered index.

CREATE TABLE t1
(
    c1 int,
    index IX1 (c1) WHERE c1 > 0
);

T.T. Créer un index inlineCreate an inline index

L’exemple suivant montre comment utiliser un index inline NONCLUSTERED pour les tables sur disque :The following shows how to use NONCLUSTERED inline for disk-based tables:

CREATE TABLE t1 
(
    c1 int, 
    INDEX ix_1 NONCLUSTERED (c1)
);

CREATE TABLE t2 
(
    c1 int, 
    c2 int INDEX ix_1 NONCLUSTERED
);

CREATE TABLE t3 
(
    c1 int, 
    c2 int, 
    INDEX ix_1 NONCLUSTERED (c1,c2)
);

U.U. Créer une table temporaire avec une clé primaire composée nommée de manière anonymeCreate a temporary table with an anonymously named compound primary key

Crée une table avec une clé primaire composée nommée de manière anonyme.Creates a table with an anonymously named compound primary key. Cela est utile pour éviter les conflits de temps d’exécution, où deux tables temporaires dans l’étendue de session, chacune d’elles dans une session distincte, utilisent le même nom pour une contrainte.This is useful to avoid run-time conflicts where two session-scoped temp tables, each in a separate session, use the same name for a constraint.

CREATE TABLE #tmp
(
    c1 int,
    c2 int,
    PRIMARY KEY CLUSTERED ([c1], [c2])
);
GO

Si vous nommez explicitement la contrainte, la deuxième session générera une erreur telle que :If you explicitly name the constraint, the second session will generate an error such as:

Msg 2714, Level 16, State 5, Line 1
There is already an object named 'PK_#tmp' in the database.
Msg 1750, Level 16, State 1, Line 1
Could not create constraint or index. See previous errors.

Le problème est dû au fait que, bien que le nom de table temporaire soit unique, les noms des contrainte ne le sont pas.The problem arises from the fact that while the temp table name is uniquified, the constraint names are not.

V.V. Utiliser des tables temporaires globales dans Azure SQL DatabaseUsing global temporary tables in Azure SQL Database

La session A crée une table temporaire globale ##test dans Azure SQL DatabaseAzure SQL Database testdb1 et ajoute une ligne.Session A creates a global temp table ##test in Azure SQL DatabaseAzure SQL Database testdb1 and adds 1 row

CREATE TABLE ##test (
    a int, 
    b int
);
INSERT INTO ##test 
VALUES (1,1);

--Obtain object ID for temp table ##test
SELECT OBJECT_ID('tempdb.dbo.##test') AS 'Object ID';

Voici l'ensemble des résultats.Here is the result set.

1253579504

Obtenir le nom de la table temporaire globale pour un objet ayant l’ID 1253579504 dans tempdb (2)Obtain global temp table name for a given object ID 1253579504 in tempdb (2)

SELECT name FROM tempdb.sys.objects WHERE object_id = 1253579504

Voici l'ensemble des résultats.Here is the result set.

##test

La session B se connecte à Azure SQL DatabaseAzure SQL Database testdb1 et peut accéder à la table ##test créée par la session A.Session B connects to Azure SQL DatabaseAzure SQL Database testdb1 and can access table ##test created by session A

SELECT * FROM ##test

Voici l'ensemble des résultats.Here is the result set.

1,1

La session C se connecte à une autre base de données dans Azure SQL DatabaseAzure SQL Database testdb2 et veut accéder à la base de données ##test créée dans testdb1.Session C connects to another database in Azure SQL DatabaseAzure SQL Database testdb2 and wants to access ##test created in testdb1. Cette instruction select échoue à cause de l’étendue de la base de données pour les tables temporaires globales.This select fails due to the database scope for the global temp tables

SELECT * FROM ##test

Ce qui génère l’erreur suivante :Which generates the following error:

Msg 208, Level 16, State 0, Line 1
Invalid object name '##test'

Adressage des objets système dans Azure SQL DatabaseAzure SQL Database tempdb à partir de la base de données utilisateur active testdb1Addressing system object in Azure SQL DatabaseAzure SQL Database tempdb from current user database testdb1

SELECT * FROM tempdb.sys.objects
SELECT * FROM tempdb.sys.columns
SELECT * FROM tempdb.sys.database_files

Voir aussiSee Also

ALTER TABLE ALTER TABLE
COLUMNPROPERTY COLUMNPROPERTY
CREATE INDEX CREATE INDEX
CREATE VIEW CREATE VIEW
Types de données Data Types
DROP INDEX DROP INDEX
sys.dm_sql_referenced_entities sys.dm_sql_referenced_entities
sys.dm_sql_referencing_entities sys.dm_sql_referencing_entities
DROP TABLE DROP TABLE
CREATE PARTITION FUNCTION CREATE PARTITION FUNCTION
CREATE PARTITION SCHEME CREATE PARTITION SCHEME
CREATE TYPE CREATE TYPE
EVENTDATA EVENTDATA
sp_help sp_help
sp_helpconstraint sp_helpconstraint
sp_rename sp_rename
sp_spaceusedsp_spaceused