ALTER TABLE (Transact-SQL)ALTER TABLE (Transact-SQL)

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database ouiAzure SQL Data Warehouse ouiParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Modifie une définition de table en modifiant, ajoutant ou déposant des colonnes et des contraintes.Modifies a table definition by altering, adding, or dropping columns and constraints. ALTER TABLE réaffecte et reconstruit également des partitions, ou désactive et active des contraintes et des déclencheurs.ALTER TABLE also reassigns and rebuilds partitions, or disables and enables constraints and triggers.

Pour plus d’informations sur les conventions de la syntaxe, consultez Conventions de la syntaxe Transact-SQL.For more information about the syntax conventions, see Transact-SQL Syntax Conventions.

Important

La syntaxe ALTER TABLE est différente pour les tables basées sur disque et les tables à mémoire optimisée.The syntax for ALTER TABLE is different for disk-based tables and memory-optimized tables. Utilisez les liens suivants pour accéder directement au bloc de syntaxe approprié pour vos types de tables et aux exemples de syntaxe appropriés :Use the following links to take you directly to the appropriate syntax block for your table types and to the appropriate syntax examples:

Syntaxe des tables basées sur disqueSyntax for disk-based tables

ALTER TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
{
    ALTER COLUMN column_name
    {
        [ type_schema_name. ] type_name
            [ (
                {
                   precision [ , scale ]
                 | max
                 | xml_schema_collection
                }
            ) ]
        [ COLLATE collation_name ]
        [ NULL | NOT NULL ] [ SPARSE ]
      | { ADD | DROP }
          { ROWGUIDCOL | PERSISTED | NOT FOR REPLICATION | SPARSE | HIDDEN }
      | { ADD | DROP } MASKED [ WITH ( FUNCTION = ' mask_function ') ]
    }
    [ WITH ( ONLINE = ON | OFF ) ]
    | [ WITH { CHECK | NOCHECK } ]
  
    | ADD
    {
        <column_definition>
      | <computed_column_definition>
      | <table_constraint>
      | <column_set_definition>
    } [ ,...n ]
      | [ system_start_time_column_name datetime2 GENERATED ALWAYS AS ROW START
                [ HIDDEN ] [ NOT NULL ] [ CONSTRAINT constraint_name ]
            DEFAULT constant_expression [WITH VALUES] ,
                system_end_time_column_name datetime2 GENERATED ALWAYS AS ROW END
                   [ HIDDEN ] [ NOT NULL ][ CONSTRAINT constraint_name ]
            DEFAULT constant_expression [WITH VALUES] ,
        ]
       PERIOD FOR SYSTEM_TIME ( system_start_time_column_name, system_end_time_column_name )
    | DROP
     [ {
         [ CONSTRAINT ][ IF EXISTS ]
         {
              constraint_name
              [ WITH
               ( <drop_clustered_constraint_option> [ ,...n ] )
              ]
          } [ ,...n ]
          | COLUMN [ IF EXISTS ]
          {
              column_name
          } [ ,...n ]
          | PERIOD FOR SYSTEM_TIME
     } [ ,...n ]
    | [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT
        { ALL | constraint_name [ ,...n ] }
  
    | { ENABLE | DISABLE } TRIGGER
        { ALL | trigger_name [ ,...n ] }
  
    | { ENABLE | DISABLE } CHANGE_TRACKING
        [ WITH ( TRACK_COLUMNS_UPDATED = { ON | OFF } ) ]
  
    | SWITCH [ PARTITION source_partition_number_expression ]
        TO target_table
        [ PARTITION target_partition_number_expression ]
        [ WITH ( <low_priority_lock_wait> ) ]

    | SET
        (
            [ FILESTREAM_ON =
                { partition_scheme_name | filegroup | "default" | "NULL" } ]
            | SYSTEM_VERSIONING =
                  {
                      OFF
                  | ON
                      [ ( HISTORY_TABLE = schema_name . history_table_name
                          [, DATA_CONSISTENCY_CHECK = { ON | OFF } ]
                          [, HISTORY_RETENTION_PERIOD =
                          {
                              INFINITE | number {DAY | DAYS | WEEK | WEEKS
                  | MONTH | MONTHS | YEAR | YEARS }
                          }
                          ]
                        )
                      ]
                  }
          )

    | REBUILD
      [ [PARTITION = ALL]
        [ WITH ( <rebuild_option> [ ,...n ] ) ]
      | [ PARTITION = partition_number
           [ WITH ( <single_partition_rebuild_option> [ ,...n ] ) ]
        ]
      ]
  
    | <table_option>
    | <filetable_option>
    | <stretch_configuration>
}
[ ; ]
  
-- ALTER TABLE options
  
<column_set_definition> ::=
    column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS

<drop_clustered_constraint_option> ::=
    {
        MAXDOP = max_degree_of_parallelism
      | ONLINE = { ON | OFF }
      | MOVE TO
         { partition_scheme_name ( column_name ) | filegroup | "default" }
    }
<table_option> ::=
    {
        SET ( LOCK_ESCALATION = { AUTO | TABLE | DISABLE } )
    }
  
<filetable_option> ::=
    {
       [ { ENABLE | DISABLE } FILETABLE_NAMESPACE ]
       [ SET ( FILETABLE_DIRECTORY = directory_name ) ]
    }
  
<stretch_configuration> ::=
    {
      SET (
        REMOTE_DATA_ARCHIVE
        {
            = ON (<table_stretch_options>)
          | = OFF_WITHOUT_DATA_RECOVERY ( MIGRATION_STATE = PAUSED )
          | ( <table_stretch_options> [, ...n] )
        }
            )
    }
  
<table_stretch_options> ::=
    {
     [ FILTER_PREDICATE = { null | table_predicate_function } , ]
       MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }
    }
  
<single_partition_rebuild__option> ::=
{
      SORT_IN_TEMPDB = { ON | OFF }
    | MAXDOP = max_degree_of_parallelism
    | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE} }
    | ONLINE = { ON [( <low_priority_lock_wait> ) ] | OFF }
}
  
<low_priority_lock_wait>::=
{
    WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ],
        ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )
}

Syntaxe des tables à mémoire optimiséeSyntax for memory-optimized tables

ALTER TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
{
    ALTER COLUMN column_name
    {
        [ type_schema_name. ] type_name
            [ (
                {
                   precision [ , scale ]
                }
            ) ]
        [ COLLATE collation_name ]
        [ NULL | NOT NULL ]
    }

    | ALTER INDEX index_name
    {
        [ type_schema_name. ] type_name
        REBUILD
        [ [ NONCLUSTERED ] WITH ( BUCKET_COUNT = bucket_count )
        ]
    }

    | ADD
    {
        <column_definition>
      | <computed_column_definition>
      | <table_constraint>
      | <table_index>
      | <column_index>
    } [ ,...n ]
      | [ system_start_time_column_name datetime2 GENERATED ALWAYS AS ROW START
                   [ HIDDEN ] [ NOT NULL ] [ CONSTRAINT constraint_name ]
          DEFAULT constant_expression [WITH VALUES] ,
            system_end_time_column_name datetime2 GENERATED ALWAYS AS ROW END
                   [ HIDDEN ] [ NOT NULL ][ CONSTRAINT constraint_name ]
          DEFAULT constant_expression [WITH VALUES] ,
         ]
       PERIOD FOR SYSTEM_TIME ( system_start_time_column_name, system_end_time_column_name )

    | DROP
     [ {
         CONSTRAINT [ IF EXISTS ]
         {
              constraint_name
          } [ ,...n ]
        | INDEX [ IF EXISTS ]
      {
         index_name
       } [ ,...n ]
          | COLUMN [ IF EXISTS ]
          {
              column_name
          } [ ,...n ]
          | PERIOD FOR SYSTEM_TIME
     } [ ,...n ]
    | [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT
        { ALL | constraint_name [ ,...n ] }

    | { ENABLE | DISABLE } TRIGGER
        { ALL | trigger_name [ ,...n ] }
  
    | SWITCH [ [ PARTITION ] source_partition_number_expression ]
        TO target_table
        [ PARTITION target_partition_number_expression ]
        [ WITH ( <low_priority_lock_wait> ) ]

    | SET
        (
            SYSTEM_VERSIONING =
                  {
                      OFF
                  | ON
                      [ ( HISTORY_TABLE = schema_name . history_table_name
                          [, DATA_CONSISTENCY_CHECK = { ON | OFF } ]
                          [, HISTORY_RETENTION_PERIOD =
                          {
                              INFINITE | number {DAY | DAYS | WEEK | WEEKS
                               | MONTH | MONTHS | YEAR | YEARS }
                          }
                          ]
                        )
                      ]
                  }
          )

    | <table_option>
}
[ ; ]

-- ALTER TABLE options

< 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 } ] ) ]
}

-- Syntax for Azure SQL Data Warehouse and Analytics Platform System

ALTER TABLE { database_name.schema_name.source_table_name | schema_name.source_table_name | source_table_name }
{
    ALTER COLUMN column_name
        {
            type_name [ ( precision [ , scale ] ) ]
            [ COLLATE Windows_collation_name ]
            [ NULL | NOT NULL ]
        }
    | ADD { <column_definition> | <column_constraint> FOR column_name} [ ,...n ]
    | DROP { COLUMN column_name | [CONSTRAINT] constraint_name } [ ,...n ]
    | REBUILD {
            [ PARTITION = ALL [ WITH ( <rebuild_option> ) ] ]
          | [ PARTITION = partition_number [ WITH ( <single_partition_rebuild_option> ] ]
      }
    | { SPLIT | MERGE } RANGE (boundary_value)
    | SWITCH [ PARTITION source_partition_number
        TO target_table_name [ PARTITION target_partition_number ] [ WITH ( TRUNCATE_TARGET = ON | OFF )
}
[;]

<column_definition>::=
{
    column_name
    type_name [ ( precision [ , scale ] ) ]
    [ <column_constraint> ]
    [ COLLATE Windows_collation_name ]
    [ NULL | NOT NULL ]
}

<column_constraint>::=
    [ CONSTRAINT constraint_name ] DEFAULT constant_expression

<rebuild_option > ::=
{
    DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
        [ ON PARTITIONS ( {<partition_number> [ TO <partition_number>] } [ , ...n ] ) ]
}

<single_partition_rebuild_option > ::=
{
    DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
}

ArgumentsArguments

database_namedatabase_name
Nom de la base de données dans laquelle la table a été créée.The name of the database in which the table was created.

schema_nameschema_name
Nom du schéma auquel appartient la table.The name of the schema to which the table belongs.

table_nametable_name
Nom de la table à modifier.The name of the table to be altered. Si la table ne se trouve pas dans la base de données active ou si elle n'est pas contenue dans le schéma appartenant à l'utilisateur actif, vous devez spécifier explicitement la base de données et le schéma.If the table isn't in the current database or contained by the schema owned by the current user, you must explicitly specify the database and schema.

ALTER COLUMNALTER COLUMN
Spécifie que la colonne nommée doit être modifiée.Specifies that the named column is to be changed or altered.

La colonne modifiée ne peut pas être :The modified column can't be:

  • Une colonne avec un type de données timestampA column with a timestamp data type.

  • la colonne ROWGUIDCOL de la table ;The ROWGUIDCOL for the table.

  • une colonne calculée ou utilisée dans une colonne calculée ;A computed column or used in a computed column.

  • utilisée dans les statistiques générées par l’instruction CREATE STATISTICS.Used in statistics generated by the CREATE STATISTICS statement. Si la colonne n’est pas un type de données varchar, nvarchar ou varbinary, le type de données n’est pas modifié.Unless the column is a varchar, nvarchar, or varbinary data type, the data type isn't changed. Et la nouvelle taille est égale ou supérieure à l’ancienne taille.And, the new size is equal to or greater than the old size. Ou si la colonne est modifiée de NOT NULL à NULL.Or, if the column is changed from not null to null. Vous devez d'abord supprimer les statistiques à l'aide de l'instruction DROP STATISTICS.First, remove the statistics using the DROP STATISTICS statement.

    Notes

    Les statistiques créées automatiquement par l'optimiseur de requête sont automatiquement supprimées par ALTER COLUMN.Statistics that are automatically generated by the query optimizer are automatically dropped by ALTER COLUMN.

  • une colonne utilisée dans une contrainte PRIMARY KEY ou [FOREIGN KEY] REFERENCES ;Used in a PRIMARY KEY or [FOREIGN KEY] REFERENCES constraint.

  • une colonne utilisée dans une contrainte CHECK ou UNIQUE.Used in a CHECK or UNIQUE constraint. Mais la modification de la longueur d'une colonne de longueur variable utilisée dans une contrainte CHECK ou UNIQUE est autorisée.But, changing the length of a variable-length column used in a CHECK or UNIQUE constraint is allowed.

  • une colonne associée à une définition par défaut.Associated with a default definition. Cependant, il est possible de modifier la longueur, la précision ou l'échelle d'une colonne si le type de données n'est pas modifié.However, the length, precision, or scale of a column can be changed if the data type isn't changed.

Vous ne pouvez modifier le type de données de colonnes text, ntext et image que de l’une des manières suivantes :The data type of text, ntext, and image columns can be changed only in the following ways:

  • text en varchar(max) , nvarchar(max) ou xmltext to varchar(max), nvarchar(max), or xml
  • ntext en varchar(max) , nvarchar(max) ou xmlntext to varchar(max), nvarchar(max), or xml
  • image en varbinary(max)image to varbinary(max)

Certaines modifications de type de données peuvent entraîner une modification des données.Some data type changes may cause a change in the data. Par exemple, la conversion d’une colonne de type nchar ou nvarchar en type char ou varchar peut entraîner la conversion de caractères étendus.For example, changing a nchar or nvarchar column, to char or varchar, might cause the conversion of extended characters. Pour plus d’informations, consultez l’article CAST et CONVERT.For more information, see CAST and CONVERT. La réduction de la précision ou de l'échelle d'une colonne peut tronquer les données.Reducing the precision or scale of a column can cause data truncation.

Notes

Vous ne pouvez pas modifier le type de données d'une colonne d'une table partitionnée.The data type of a column of a partitioned table can't be changed.

Le type de données des colonnes inclus dans un index ne peut pas être modifié, sauf quand la colonne est du type varchar, nvarchar ou varbinary et que la nouvelle taille est supérieure ou égale à l’ancienne taille.The data type of columns included in an index can't be changed unless the column is a varchar, nvarchar, or varbinary data type, and the new size is equal to or larger than the old size.

Les colonnes incluses dans une contrainte de clé primaire ne peuvent pas être modifiées de NOT NULL en NULL.A column included in a primary key constraint, can't be changed from NOT NULL to NULL.

Lorsqu’Always Encrypted est utilisé (sans enclaves sécurisées), si la colonne en cours de modification est chiffrée avec 'ENCRYPTED WITH', vous pouvez changer le type de données en un type de données compatible (par ex., INT en BIGINT), mais vous ne pouvez pas changer les paramètres de chiffrement.When using Always Encrypted (without secure enclaves), if the column being modified is encrypted with 'ENCRYPTED WITH', you can change the datatype to a compatible datatype (such as INT to BIGINT), but you can't change any encryption settings.

Lorsque vous utilisez Always Encrypted avec des enclaves sécurisées, vous pouvez modifier les paramètres de chiffrement si la clé de chiffrement de colonne qui protège la colonne (et la nouvelle clé de chiffrement de colonne si vous modifiez la clé) prennent en charge les calculs d’enclave (chiffrés avec des clés principales de la colonne prenant en charge l’enclave).When using Always Encrypted with secure enclaves, you can change any encryption setting, if the column encryption key protecting the column (and the new column encryption key, if you're changing the key) support enclave computations (encrypted with enclave-enabled column master keys). Pour plus d’informations, consultez Always Encrypted avec enclaves sécurisées.For details, see Always Encrypted with secure enclaves.

column_namecolumn_name
Nom de la colonne à ajouter, modifier ou supprimer.The name of the column to be altered, added, or dropped. Le maximum pour column_name est de 128 caractères.The column_name maximum is 128 characters. Pour les nouvelles colonnes, vous pouvez omettre column_name pour les colonnes créées avec un type de données timestamp.For new columns, you can omit column_name for columns created with a timestamp data type. Le nom timestamp est utilisé si vous ne spécifiez pas de column_name pour une colonne du type de données timestamp.The name timestamp is used if you don't specify column_name for a timestamp data type column.

Notes

Les nouvelles colonnes sont ajoutées après toutes les colonnes existantes de la table à modifier.New columns are added after all existing columns in the table being altered.

[ type_schema_name .[ type_schema_name. ] type_name] type_name
Nouveau type de données de la colonne modifiée ou type de données de la colonne ajoutée.The new data type for the altered column, or the data type for the added column. Vous ne pouvez pas spécifier type_name pour les colonnes existantes de tables partitionnées.You can't specify type_name for existing columns of partitioned tables. type_name peut être l’un des types suivants :type_name can be any one of the following types:

  • type de données système SQL ServerSQL Server ;A SQL ServerSQL Server system data type.
  • type de données alias dérivé d'un type de données système SQL ServerSQL Server.An alias data type based on a SQL ServerSQL Server system data type. Vous créez les types de données alias à l'aide de l'instruction CREATE TYPE avant de pouvoir les utiliser dans une définition de table.You create alias data types with the CREATE TYPE statement before they can be used in a table definition.
  • type .NET Framework.NET Framework défini par l'utilisateur et schéma auquel il appartient.A .NET Framework.NET Framework user-defined type, and the schema to which it belongs. Vous créez des types alias à l'aide de l'instruction CREATE TYPE avant de pouvoir les utiliser dans une définition de table.You create user-defined types with the CREATE TYPE statement before they can be used in a table definition.

Les critères suivants s’appliquent à l’argument type_name d’une colonne modifiée :The following are criteria for type_name of an altered column:

  • Le type de données précédent doit pouvoir être implicitement converti vers le nouveau type de données.The previous data type must be implicitly convertible to the new data type.
  • type_name ne peut pas être timestamp.type_name can't be timestamp.
  • Les valeurs par défaut ANSI_NULL sont toujours activées pour ALTER COLUMN ; si l'option n'est pas spécifiée, la colonne accepte les valeurs NULL.ANSI_NULL defaults are always on for ALTER COLUMN; if not specified, the column is nullable.
  • Le remplissage ANSI_PADDING est toujours activé (ON) pour ALTER COLUMN.ANSI_PADDING padding is always ON for ALTER COLUMN.
  • Si la colonne modifiée est une colonne d’identité, new_data_type doit être un type de données qui prend en charge la propriété d’identité.If the modified column is an identity column, new_data_type must be a data type that supports the identity property.
  • La configuration actuelle de SET ARITHABORT est ignorée.The current setting for SET ARITHABORT is ignored. ALTER TABLE fonctionne comme si l'option ARITHABORT était activée (ON).ALTER TABLE operates as if ARITHABORT is set to ON.

Notes

Si la clause COLLATE n'est pas spécifiée, la modification du type de données d'une colonne entraîne une modification du classement, qui est remplacé par le classement par défaut de la base de données.If the COLLATE clause isn't specified, changing the data type of a column causes a collation change to the default collation of the database.

precisionprecision
Précision du type de données spécifié.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.

scalescale
Échelle du type de données spécifié.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.

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

xml_schema_collectionxml_schema_collection
S’applique à : SQL ServerSQL Server (SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

S’applique seulement au type de données xml, pour associer un schéma XML au type.Applies only to the xml data type for associating an XML schema with the type. Avant de définir une colonne de type xml dans une collection de schémas, vous commencez par créer la collection de schémas avec CREATE XML SCHEMA COLLECTION.Before typing an xml column to a schema collection, you first create the schema collection in the database by using CREATE XML SCHEMA COLLECTION.

COLLATE < collation_name >COLLATE < collation_name >
Spécifie le nouveau classement pour la colonne modifiée.Specifies the new collation for the altered column. Si l'argument n'est pas spécifié, c'est le classement par défaut de la base de données qui est affecté à la colonne.If not specified, the column is assigned the default collation of the database. Le nom du classement peut être un nom de classement Windows ou SQL.Collation name can be either a Windows collation name or a SQL collation name. Pour en obtenir la liste et des informations supplémentaires, consultez les articles Nom de classement Windows et Nom du classement SQL Server.For a list and more information, see Windows Collation Name and SQL Server Collation Name.

La clause COLLATE modifie uniquement les classements des colonnes ayant les types de données char, varchar, nchar et nvarchar.The COLLATE clause changes the collations only of columns of the char, varchar, nchar, and nvarchar data types. Pour modifier le classement d’une colonne de type de données alias définie par l’utilisateur, utilisez des instructions ALTER TABLE distinctes afin de transformer la colonne en type de données système SQL ServerSQL Server.To change the collation of a user-defined alias data type column, use separate ALTER TABLE statements to change the column to a SQL ServerSQL Server system data type. Ensuite, modifiez son classement et transformez à nouveau la colonne en type de données alias.Then, change its collation and change the column back to an alias data type.

ALTER COLUMN ne peut pas modifier un classement si une ou plusieurs des conditions suivantes sont remplies :ALTER COLUMN can't have a collation change if one or more of the following conditions exist:

  • Une contrainte CHECK, une contrainte FOREIGN KEY ou des colonnes calculées font référence à la colonne modifiée.If a CHECK constraint, FOREIGN KEY constraint, or computed columns reference the column changed.
  • Un index, des statistiques ou un index de recherche en texte intégral sont créés sur la colonne.If any index, statistics, or full-text index are created on the column. Les statistiques créées automatiquement sur la colonne modifiée sont supprimées si le classement de la colonne est modifié.Statistics created automatically on the column changed are dropped if the column collation is changed.
  • Une vue ou une fonction liée à un schéma fait référence à la colonne.If a schema-bound view or function references the column.

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

NULL | NOT NULLNULL | NOT NULL
Spécifie si la colonne accepte les valeurs NULL.Specifies whether the column can accept null values. Les colonnes qui n'acceptent pas les valeurs NULL ne peuvent être ajoutées à l'aide de l'instruction ALTER TABLE que si une valeur par défaut a été définie elles ou si la table est vide.Columns that don't allow null values are added with ALTER TABLE only if they have a default specified or if the table is empty. Vous pouvez spécifier NOT NULL pour des colonnes calculées seulement si vous avez également spécifié PERSISTED.You can specify NOT NULL for computed columns only if you've also specified PERSISTED. Si la nouvelle colonne accepte les valeurs NULL et que vous ne spécifiez aucune valeur par défaut, la nouvelle colonne contient une valeur NULL pour chaque ligne de la table.If the new column allows null values and you don't specify a default, the new column contains a null value for each row in the table. Si la nouvelle colonne accepte les valeurs NULL et que vous ajoutez une définition de valeur par défaut avec la nouvelle colonne, vous pouvez utiliser WITH VALUES pour stocker la valeur par défaut dans la nouvelle colonne pour chaque ligne existante de la table.If the new column allows null values and you add a default definition with the new column, you can use WITH VALUES to store the default value in the new column for each existing row in the table.

Si la nouvelle colonne n’autorise pas les valeurs NULL et que la table n’est pas vide, vous devez ajouter une définition PAR DÉFAUT avec la nouvelle colonne.If the new column doesn't allow null values and the table isn't empty, you have to add a DEFAULT definition with the new column. La nouvelle colonne est alors automatiquement chargée avec la valeur par défaut dans les nouvelles colonnes de chaque ligne existante.And, the new column automatically loads with the default value in the new columns in each existing row.

Vous pouvez spécifier l'option NULL dans ALTER COLUMN pour forcer une colonne NOT NULL à accepter des valeurs NULL, excepté pour les colonnes soumises à des contraintes PRIMARY KEY.You can specify NULL in ALTER COLUMN to force a NOT NULL column to allow null values, except for columns in PRIMARY KEY constraints. Vous ne pouvez spécifier l'option NOT NULL dans ALTER COLUMN que si la colonne ne contient pas de valeurs NULL.You can specify NOT NULL in ALTER COLUMN only if the column contains no null values. Les valeurs NULL doivent être mises à jour avec une valeur quelconque avant que ALTER COLUMN NOT NULL soit autorisé. Par exemple :The null values must be updated to some value before the ALTER COLUMN NOT NULL is allowed, for example:

UPDATE MyTable SET NullCol = N'some_value' WHERE NullCol IS NULL;
ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL;

Lorsque vous créez ou modifiez une table à l'aide des instructions CREATE TABLE ou ALTER TABLE, les paramètres de la base de données et de la session influencent et, éventuellement. modifient la possibilité de valeurs NULL pour le type de données utilisé dans la définition d'une colonne.When you create or alter a table with the CREATE TABLE or ALTER TABLE statements, the database and session settings influence and possibly override the nullability of the data type that's used in a column definition. Veillez à toujours définir explicitement une colonne comme NULL ou NOT NULL dans le cas de colonnes non calculées.Be sure that you always explicitly define a column as NULL or NOT NULL for noncomputed columns.

Si vous ajoutez une colonne avec un type de données défini par l'utilisateur, veillez à définir la colonne avec la même possibilité de valeur Null que le type de données défini par l'utilisateur.If you add a column with a user-defined data type, be sure to define the column with the same nullability as the user-defined data type. Spécifiez également une valeur par défaut pour la colonne.And, specify a default value for the column. Pour plus d’informations, consultez CREATE TABLE.For more information, see CREATE TABLE.

Notes

Si NULL ou NOT NULL est spécifié avec ALTER COLUMN, vous devez également spécifier new_data_type [(precision [, scale ])].If NULL or NOT NULL is specified with ALTER COLUMN, new_data_type [(precision [, scale ])] must also be specified. Si vous ne modifiez pas le type de données, la précision ou l'échelle, spécifiez les valeurs actuelles de la colonne.If the data type, precision, and scale are not changed, specify the current column values.

[ {ADD | DROP} ROWGUIDCOL ][ {ADD | DROP} ROWGUIDCOL ]
S’applique à : SQL ServerSQL Server (SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Spécifie que la propriété ROWGUIDCOL est supprimée de la colonne spécifiée ou y est ajoutée.Specifies that the ROWGUIDCOL property is added to or dropped from the specified column. ROWGUIDCOL indique que la colonne est une colonne d'identificateur global unique (GUID).ROWGUIDCOL indicates that the column is a row GUID column. Vous ne pouvez définir qu’une seule colonne uniqueidentifier par table comme colonne ROWGUIDCOL.You can set only one uniqueidentifier column per table as the ROWGUIDCOL column. Et vous ne pouvez affecter la propriété ROWGUIDCOL qu’à une colonne uniqueidentifier.And, you can only assign the ROWGUIDCOL property to a uniqueidentifier column. Vous ne pouvez pas affecter ROWGUIDCOL à une colonne dont le type de données est défini par l'utilisateur.You can't assign ROWGUIDCOL to a column of a user-defined data type.

ROWGUIDCOL n'impose pas l'unicité des valeurs stockées dans la colonne et ne génère pas automatiquement des valeurs pour les nouvelles lignes insérées dans la table.ROWGUIDCOL doesn't enforce uniqueness of the values stored in the column and doesn't automatically generate values for new rows that are inserted into the table. Pour générer des valeurs uniques pour chaque colonne, utilisez la fonction NEWID ou NEWSEQUENTIALID dans les instructions INSERT.To generate unique values for each column, either use the NEWID or NEWSEQUENTIALID function on INSERT statements. Vous pouvez également spécifier la fonction NEWID ou NEWSEQUENTIALID comme valeur par défaut pour la colonne.Or, specify the NEWID or NEWSEQUENTIALID function as the default for the column.

[ {ADD | DROP} PERSISTED ][ {ADD | DROP} PERSISTED ]
Spécifie que la propriété PERSISTED est ajoutée à ou supprimée de la colonne spécifiée.Specifies that the PERSISTED property is added to or dropped from the specified column. La colonne doit être une colonne calculée définie avec une expression déterministe.The column must be a computed column that's defined with a deterministic expression. Pour les colonnes spécifiées avec la propriété PERSISTED, le Moteur de base de donnéesDatabase Engine stocke physiquement les valeurs calculées dans la table et met à jour les valeurs lorsque d'autres colonnes dont dépend la colonne calculée sont mises à jour.For columns specified as PERSISTED, the Moteur de base de donnéesDatabase Engine physically stores the computed values in the table and updates the values when any other columns on which the computed column depends are updated. Si vous marquez une colonne calculée comme PERSISTED, vous pouvez créer des index sur des colonnes calculées définies sur des expressions qui sont déterministes mais pas précises.By marking a computed column as PERSISTED, you can create indexes on computed columns defined on expressions that are deterministic, but not precise. Pour plus d'informations, consultez Indexes on Computed Columns.For more information, see Indexes on Computed Columns.

Toute colonne calculée utilisée comme colonne de partitionnement d'une table partitionnée doit être explicitement marquée comme PERSISTED.Any computed column that's used as a partitioning column of a partitioned table must be explicitly marked PERSISTED.

DROP NOT FOR REPLICATIONDROP NOT FOR REPLICATION
S’applique à : SQL ServerSQL Server (SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Spécifie que les valeurs sont incrémentées dans les colonnes d'identité lorsque les agents de réplication effectuent des opérations d'insertion.Specifies that values are incremented in identity columns when replication agents carry out insert operations. Vous ne pouvez spécifier cette clause que si column_name est une colonne d’identité.You can specify this clause only if column_name is an identity column.

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. Vous ne pouvez pas définir des colonnes éparses comme NOT NULL.You can't set sparse columns as NOT NULL. Le fait de convertir une colonne éparse en colonne non éparse ou inversement a pour effet de verrouiller la table pendant la durée de l'exécution de la commande.Converting a column from sparse to nonsparse or from nonsparse to sparse, locks the table for the duration of the command execution. Vous devrez peut-être utiliser la clause REBUILD pour récupérer de l'espace.You may need to use the REBUILD clause to reclaim any space savings. 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.

ADD MASKED WITH ( FUNCTION = ' mask_function ')ADD MASKED WITH ( FUNCTION = ' mask_function ')
S’applique à : SQL ServerSQL Server (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 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 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 :Three functions are available:

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

Pour supprimer un masque, utilisez DROP MASKED.To drop a mask, use DROP MASKED. Pour les paramètres de fonction, consultez Masquage dynamique des données.For function parameters, see Dynamic Data Masking.

WITH ( ONLINE = ON | OFF) <s’applique à la modification d’une colonne>WITH ( ONLINE = ON | OFF) <as applies to altering a column>
S’applique à : SQL ServerSQL Server (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 ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Permet d'effectuer de nombreuses actions de modification de colonne pendant que la table reste disponible.Allows many alter column actions to be carried out while the table remains available. La valeur par défaut est OFF.Default is OFF. Vous pouvez exécuter la modification de colonne en ligne pour les modifications de colonne liées à un type de données, à la longueur de colonne ou à la précision, à la possibilité de valeur null, au caractère épars et au classement.You can run alter column online for column changes related to data type, column length or precision, nullability, sparseness, and collation.

La modification de colonne en ligne permet aux statistiques créées par l'utilisateur et automatiques de faire référence à la colonne modifiée pendant la durée de l'opération ALTER COLUMN, ce qui permet d’exécuter les requêtes de la manière habituelle.Online alter column allows user created and autostatistics to reference the altered column for the duration of the ALTER COLUMN operation, which allows queries to run as usual. À la fin de l'opération, les statistiques automatiques qui font référence à la colonne sont supprimées et les statistiques créées par l'utilisateur sont invalidées.At the end of the operation, autostats that reference the column are dropped and user-created stats are invalidated. L'utilisateur doit mettre à jour manuellement les statistiques générées par l'utilisateur une fois l'opération terminée.The user must manually update user-generated statistics after the operation is completed. Si la colonne fait partie d’une expression de filtre pour des index ou les statistiques, vous ne pouvez pas effectuer une opération ALTER COLUMN.If the column is part of a filter expression for any statistics or indexes then you can't perform an alter column operation.

  • Pendant l'exécution de l'opération de modification de colonne en ligne, toutes les opérations qui peuvent établir une dépendance sur la colonne (index, vues, etc.) sont bloquées ou échouent avec une erreur appropriée.While the online alter column operation is running, all operations that could take a dependency on the column (index, views, and so on.) block or fail with an appropriate error. Ce comportement garantit que l'opération de modification de colonne en ligne n'échouera pas en raison des dépendances introduites pendant son exécution.This behavior guarantees that online alter column won't fail because of dependencies introduced while the operation was running.
  • Le remplacement de la valeur NOT NULL par NULL dans une colonne n'est pas pris en charge en tant qu'opération en ligne quand la colonne modifiée est référencée par les index non-cluster.Altering a column from NOT NULL to NULL isn't supported as an online operation when the altered column is referenced by nonclustered indexes.
  • La modification en ligne n'est pas prise en charge quand la colonne est référencée par une contrainte de validation et que l'opération de modification limite la précision de la colonne (numérique ou datetime).Online alter isn't supported when the column is referenced by a check constraint and the alter operation is restricting the precision of the column (numeric or datetime).
  • L'option WAIT_AT_LOW_PRIORITY ne peut pas être utilisée avec la modification de colonne en ligne.The WAIT_AT_LOW_PRIORITY option can't be used with online alter column.
  • ALTER COLUMN ... ADD/DROP PERSISTED n’est pas pris en charge pour modifier la colonne en ligne.ALTER COLUMN ... ADD/DROP PERSISTED isn't supported for online alter column.
  • ALTER COLUMN ... ADD/DROP ROWGUIDCOL/NOT FOR REPLICATION n’est pas affecté par la modification de colonne en ligne.ALTER COLUMN ... ADD/DROP ROWGUIDCOL/NOT FOR REPLICATION isn't affected by online alter column.
  • La modification de colonne en ligne ne prend pas en charge la modification d'une table où le suivi des modifications est activé ou qui est un serveur de publication de la réplication de fusion.Online alter column doesn't support altering a table where change tracking is enabled or that's a publisher of merge replication.
  • La modification de colonne en ligne ne prend pas en charge la modification depuis ou vers des types de données CLR.Online alter column doesn't support altering from or to CLR data types.
  • La modification de colonne en ligne ne prend pas en charge la modification d'un type de données XML qui possède une collection de schémas différente de la collection de schémas active.Online alter column doesn't support altering to an XML data type that has a schema collection different than the current schema collection.
  • La modification de colonne en ligne ne réduit pas les restrictions relatives aux périodes de modification possibles d'une colonne.Online alter column doesn't reduce the restrictions on when a column can be altered. Les références par index/statistiques, etc. peuvent entraîner l’échec de la modification.References by index/stats, and so on, might cause the alter to fail.
  • La modification de colonne en ligne ne prend pas en charge la modification simultanée de plusieurs colonnes.Online alter column doesn't support altering more than one column concurrently.
  • La modification de colonne en ligne n’a aucun effet dans une table temporelle dont la version est contrôlée par le système.Online alter column has no effect in a system-versioned temporal table. L’opération ALTER COLUMN n’est pas effectuée en ligne, quelle que soit la valeur spécifiée pour l’option ONLINE.ALTER column isn't run as online regardless of which value was specified for ONLINE option.

La modification de colonne en ligne a des exigences, restrictions et fonctionnalités similaires à la reconstruction d'index en ligne, notamment les suivantes :Online alter column has similar requirements, restrictions, and functionality as online index rebuild, which includes:

  • La reconstruction d'index en ligne n'est pas prise en charge quand la table contient des colonnes LOB ou filestream héritées, ou quand la table possède un index columnstore.Online index rebuild isn't supported when the table contains legacy LOB or filestream columns or when the table has a columnstore index. Les mêmes limitations s'appliquent à la modification de colonne en ligne.The same limitations apply for online alter column.
  • Une colonne existante modifiée nécessite deux fois plus d'allocation d'espace : pour la colonne d'origine et la colonne masquée nouvellement créée.An existing column being altered requires twice the space allocation, for the original column and for the newly created hidden column.
  • La stratégie de verrouillage lors d'une opération de modification de colonne en ligne suit le même modèle de verrouillage utilisé pour la construction d'index en ligne.The locking strategy during an alter column online operation follows the same locking pattern used for online index build.

WITH CHECK | WITH NOCHECKWITH CHECK | WITH NOCHECK
Spécifie si les données de la table sont ou non validées par sur une contrainte FOREIGN KEY ou CHECK nouvellement ajoutée ou réactivée.Specifies whether the data in the table is or isn't validated against a newly added or re-enabled FOREIGN KEY or CHECK constraint. Si vous ne spécifiez rien, l'option WITH CHECK est utilisée pour les nouvelles contraintes et l'option WITH NOCHECK pour les contraintes réactivées.If you don't specify, WITH CHECK is assumed for new constraints, and WITH NOCHECK is assumed for re-enabled constraints.

Utilisez WITH NOCHECK si vous ne voulez pas vérifier les nouvelles contraintes CHECK ou FOREIGN KEY sur les données existantes.If you don't want to verify new CHECK or FOREIGN KEY constraints against existing data, use WITH NOCHECK. Ceci n'est pas recommandé, sauf dans quelques cas rares.We don't recommend doing this, except in rare cases. La nouvelle contrainte est évaluée dans toutes les mises à jour ultérieures.The new constraint is evaluated in all later data updates. Toute violation de contrainte supprimée par WITH NOCHECK quand la contrainte est ajoutée risque de provoquer l’échec des mises à jour ultérieures si elles mettent à jour des lignes avec des données qui ne respectent pas la contrainte.Any constraint violations that are suppressed by WITH NOCHECK when the constraint is added may cause future updates to fail if they update rows with data that doesn't follow the constraint.

Notes

L'optimiseur de requête ne prend pas en compte les contraintes définies avec WITH NOCHECK.The query optimizer doesn't consider constraints that are defined WITH NOCHECK. De telles contraintes sont ignorées tant qu'elles n'ont pas été réactivées à l'aide d'ALTER TABLE table WITH CHECK CHECK CONSTRAINT ALL.Such constraints are ignored until they are re-enabled by using ALTER TABLE table WITH CHECK CHECK CONSTRAINT ALL.

ALTER INDEX index_nameALTER INDEX index_name
Spécifie que le nombre de compartiments pour index_name doit être modifié.Specifies that the bucket count for index_name is to be changed or altered.

La syntaxe ALTER TABLE… ADD/DROP/ALTER INDEX est uniquement prise en charge pour les tables optimisées en mémoire.The syntax ALTER TABLE ... ADD/DROP/ALTER INDEX is supported only for memory-optimized tables.

Important

En l’absence d’instruction ALTER TABLE, les instructions CREATE INDEX, DROP INDEX, ALTER INDEX et PAD_INDEX ne sont pas prises en charge pour les index sur les tables à mémoire optimisée.Without using an ALTER TABLE statement, the statements CREATE INDEX, DROP INDEX, ALTER INDEX, and PAD_INDEX are not supported for indexes on memory-optimized tables.

ADDADD
Spécifie qu’une ou plusieurs définitions de colonnes, définitions de colonnes calculées ou contraintes de tables sont ajoutées.Specifies that one or more column definitions, computed column definitions, or table constraints are added. Ou bien les colonnes utilisées par le système pour le contrôle de version sont ajoutées.Or, the columns that the system uses for system versioning are added. Pour les tables optimisées en mémoire, vous pouvez ajouter un index.For memory-optimized tables, you can add an index.

Notes

Les nouvelles colonnes sont ajoutées après toutes les colonnes existantes de la table à modifier.New columns are added after all existing columns in the table being altered.

Important

En l’absence d’une instruction ALTER TABLE, les instructions CREATE INDEX, DROP INDEX, ALTER INDEX et PAD_INDEX ne sont pas prises en charge pour les index sur les tables à mémoire optimisée.Without using an ALTER TABLE statement, the statements CREATE INDEX, DROP INDEX, ALTER INDEX, and PAD_INDEX aren't supported for indexes on memory-optimized tables.

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 2017 (14.x)SQL Server 2017 (14.x) à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2017 (14.x)SQL Server 2017 (14.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Spécifie les noms des colonnes que le système utilise pour enregistrer la période pendant laquelle un enregistrement est valide.Specifies the names of the columns that the system uses to record the period of time for which a record is valid. Vous pouvez spécifier des colonnes existantes ou créer des colonnes dans le cadre de l’argument ADD PERIOD FOR SYSTEM_TIME.You can specify existing columns or create new columns as part of the ADD PERIOD FOR SYSTEM_TIME argument. Configurez les colonnes avec le type de données datetime2 et définissez-les comme NOT NULL.Set up the columns with the datatype of datetime2 and define them as NOT NULL. Si vous définissez une colonne de période avec la valeur NULL, une erreur se produit.If you define a period column as NULL, an error results. Vous pouvez définir un élément column_constraint et/ou spécifier des valeurs par défaut pour les colonnes dans le cas des colonnes system_start_time et system_end_time.You can define a column_constraint and/or Specify Default Values for Columns for the system_start_time and system_end_time columns. Consultez l’Exemple A, dans les exemples suivants de Gestion système des versions ; il illustre l’utilisation d’une valeur par défaut pour la colonne system_end_time.See Example A in the following System Versioning examples that demonstrates using a default value for the system_end_time column.

Utilisez cet argument avec l’argument SYSTEM_VERSIONING pour activer la gestion système des versions sur une table existante.Use this argument with the SET SYSTEM_VERSIONING argument to enable system versioning on an existing table. Pour plus d’informations, consultez Tables temporelles et Prise en main des tables temporelles dans Azure SQL Database.For more information, see Temporal Tables and Getting Started with Temporal Tables in Azure SQL Database.

À compter de SQL Server 2017 (14.x)SQL Server 2017 (14.x), les utilisateurs peuvent marquer l’une des colonnes de période, ou les deux, avec l’indicateur HIDDEN afin de masquer implicitement ces colonnes pour que SELECT * FROM <table_name> ne renvoie pas de valeur pour elles.As of SQL Server 2017 (14.x)SQL Server 2017 (14.x), users can mark one or both period columns with HIDDEN flag to implicitly hide these columns such that SELECT * FROM <table_name> doesn't return a value for the columns. Par défaut, les colonnes de période ne sont pas masquées.By default, period columns aren't 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.

DROPDROP
Spécifie qu’une ou plusieurs définitions de colonnes, définitions de colonnes calculées ou contraintes de tables sont supprimées, ou qu’il faut supprimer la spécification pour les colonnes que le système utilise pour la gestion système des versions.Specifies that one or more column definitions, computed column definitions, or table constraints are dropped, or to drop the specification for the columns that the system uses for system versioning.

CONSTRAINT constraint_nameCONSTRAINT constraint_name
Spécifie que constraint_name est supprimé de la table.Specifies that constraint_name is removed from the table. Vous pouvez spécifier plusieurs contraintes.Multiple constraints can be listed.

Vous pouvez déterminer le nom de la contrainte défini par l’utilisateur ou fourni par le système en effectuant une requête dans les vues de catalogue sys.check_constraint, sys.default_constraints, sys.key_constraints et sys.foreign_keys.You can determine the user-defined or system-supplied name of the constraint by querying the sys.check_constraint, sys.default_constraints, sys.key_constraints, and sys.foreign_keys catalog views.

Il n'est pas possible de supprimer une contrainte PRIMARY KEY s'il existe un index XML sur la table.A PRIMARY KEY constraint can't be dropped if an XML index exists on the table.

INDEX index_nameINDEX index_name
Spécifie que nom_index est supprimé de la table.Specifies that index_name is removed from the table.

La syntaxe ALTER TABLE… ADD/DROP/ALTER INDEX est uniquement prise en charge pour les tables optimisées en mémoire.The syntax ALTER TABLE ... ADD/DROP/ALTER INDEX is supported only for memory-optimized tables.

Important

En l’absence d’instruction ALTER TABLE, les instructions CREATE INDEX, DROP INDEX, ALTER INDEX et PAD_INDEX ne sont pas prises en charge pour les index sur les tables à mémoire optimisée.Without using an ALTER TABLE statement, the statements CREATE INDEX, DROP INDEX, ALTER INDEX, and PAD_INDEX are not supported for indexes on memory-optimized tables.

COLUMN column_nameCOLUMN column_name
Spécifie que constraint_name ou column_name est supprimé de la table.Specifies that constraint_name or column_name is removed from the table. Vous pouvez spécifier plusieurs colonnes.Multiple columns can be listed.

Une colonne ne peut pas être supprimée lorsqu'elle est :A column can't be dropped when it's:

  • utilisée dans un index, sous la forme d’une colonne clé ou un INCLUDE ;Used in an index, whether as a key column or as an INCLUDE
  • utilisée dans une contrainte CHECK, FOREIGN KEY, UNIQUE ou PRIMARY KEY ;Used in a CHECK, FOREIGN KEY, UNIQUE, or PRIMARY KEY constraint.
  • associée à une valeur par défaut définie à l'aide du mot clé DEFAULT ou liée à un objet par défaut ;Associated with a default that's defined with the DEFAULT keyword, or bound to a default object.
  • liée à une règle.Bound to a rule.

Notes

La suppression d'une colonne ne permet pas de récupérer l'espace disque de la colonne.Dropping a column doesn't reclaim the disk space of the column. Vous pouvez être amené à récupérer l'espace disque d'une colonne supprimée lorsque la taille des lignes d'une table est proche de sa limite ou l'a dépassée.You may have to reclaim the disk space of a dropped column when the row size of a table is near, or has exceeded, its limit. Récupérez de l’espace en créant un index cluster sur la table ou en reconstruisant un index cluster existant à l’aide de l’instruction ALTER INDEX.Reclaim space by creating a clustered index on the table or rebuilding an existing clustered index by using ALTER INDEX. Pour plus d’informations sur l’impact de la suppression de types de données LOB (Large Object), consultez l’entrée de blog CSS.For information about the impact of dropping LOB data types, see this CSS blog entry.

PERIOD FOR SYSTEM_TIMEPERIOD FOR SYSTEM_TIME
S’applique à : SQL ServerSQL Server (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 ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Supprime la spécification pour les colonnes que le système utilisera pour la gestion système des versions.Drops the specification for the columns that the system will use for system versioning.

WITH <drop_clustered_constraint_option>WITH <drop_clustered_constraint_option>
Spécifie qu’une ou plusieurs options de suppression de contrainte cluster sont définies.Specifies that one or more drop clustered constraint options are set.

MAXDOP = max_degree_of_parallelismMAXDOP = max_degree_of_parallelism
S’applique à : SQL ServerSQL Server (SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Remplace l’option de configuration max degree of parallelism seulement pendant la durée de l’opération.Overrides the max degree of parallelism configuration option only for the duration of the operation. Pour plus d’informations, consultez Configurer l’option de configuration du serveur max degree of parallelism.For more information, see Configure the max degree of parallelism Server Configuration Option.

Utilisez l'option MAXDOP pour limiter le nombre de processeurs utilisés dans une exécution de plans parallèles.Use the MAXDOP option to limit the number of processors used in parallel plan execution. Le nombre maximal de processeurs est égal à 64.The maximum is 64 processors.

max_degree_of_parallelism peut prendre l’une des valeurs suivantes :max_degree_of_parallelism can be one of the following values:

11
Supprime la création de plans parallèles.Suppresses parallel plan generation.

>1>1
Limite au nombre spécifié le nombre maximal de processeurs utilisés dans le traitement en parallèle des index.Restricts the maximum number of processors used in a parallel index operation to the specified number.

0 (valeur par défaut)0 (default)
Utilise le nombre réel de processeurs ou un nombre de processeurs inférieur en fonction de la charge de travail actuelle du système.Uses the actual number of processors or fewer based on the current system workload.

Pour plus d’informations, consultez Configurer des opérations d’index parallèles.For more information, see Configure Parallel Index Operations.

Notes

Les opérations d’index parallèles ne sont pas disponibles dans toutes les éditions de SQL ServerSQL Server.Parallel index operations aren't available in every edition of SQL ServerSQL Server. Pour plus d’informations, consultez Éditions et fonctionnalités prises en charge de SQL Server 2016 et Éditions et fonctionnalités prises en charge de SQL Server 2017.For more information, see Editions and Supported Features for SQL Server 2016, and Editions and Supported Features for SQL Server 2017.

ONLINE = { ON | OFF } << s’applique à drop_clustered_constraint_option>ONLINE = { ON | OFF } <as applies to drop_clustered_constraint_option>
Indique si les tables sous-jacentes et les index associés sont disponibles pour les requêtes et la modification de données pendant l'opération d'index.Specifies whether underlying tables and associated indexes are available for queries and data modification during the index operation. La valeur par défaut est OFF.The default is OFF. Vous pouvez exécuter REBUILD en tant qu’opération ONLINE.You can run REBUILD as an ONLINE operation.

ONON
Les verrous de table à long terme ne sont pas maintenus pendant la durée de l'opération d'index.Long-term table locks aren't held for the duration of the index operation. Lors de la principale phase de l'indexation, seul le verrou de partage intentionnel (IS, Intent Share) est maintenu sur la table source.During the main phase of the index operation, only an Intent Share (IS) lock is held on the source table. Ceci permet d'effectuer des requêtes ou des mises à jour dans la table sous-jacente et à l'opération sur les index de continuer.This behavior enables queries or updates to the underlying table and indexes to continue. Au début de l'opération, un verrou partagé (S) est maintenu sur l'objet source pendant une période de temps courte.At the start of the operation, a Shared (S) lock is held on the source object for a short time. À la fin de l’opération, pendant une courte période, un verrou S (partagé) est acquis sur la source si un index non-cluster est créé.At the end of the operation, for a short time, an S (Shared) lock is acquired on the source if a nonclustered index is being created. Ou bien, un verrou SCH-M (modification du schéma) est acquis lorsqu’un index cluster est créé ou supprimé en ligne et lorsqu’un index cluster ou non-cluster est reconstruit.Or, an SCH-M (Schema Modification) lock is acquired when a clustered index is created or dropped online and when a clustered or nonclustered index is being rebuilt. ONLINE ne peut pas prendre la valeur ON si un index est en cours de création sur une table locale temporaire.ONLINE can't be set to ON when an index is being created on a local temporary table. Seule l'opération de reconstruction de segment monothread est autorisée.Only single-threaded heap rebuild operation is allowed.

Pour exécuter l’instruction DDL pour SWITCH ou une reconstruction d’index en ligne, toutes les transactions bloquantes actives qui s’exécutent sur une table particulière doivent être terminées.To run the DDL for SWITCH or online index rebuild, all active blocking transactions running on a particular table must be completed. Lors de l’exécution, SWITCH ou l’opération de reconstruction empêche de nouvelles transactions de commencer et peut affecter de manière significative le débit de la charge de travail et différer temporairement l’accès à la table sous-jacente.When executing, the SWITCH or rebuild operation prevents new transactions from starting and might significantly affect the workload throughput and temporarily delay access to the underlying table.

OFFOFF
Des verrous de table s’appliquent pendant l'opération d'indexation.Table locks apply for the duration of the index operation. Une opération d'indexation hors ligne qui crée, régénère ou supprime un index cluster, ou régénère ou supprime un index non cluster, acquiert un verrou de modification de schéma (Sch-M) sur la table.An offline index operation that creates, rebuilds, or drops a clustered index, or rebuilds or drops a nonclustered index, acquires a Schema modification (Sch-M) lock on the table. Ce verrou empêche tous les utilisateurs d'accéder à la table sous-jacente pendant la durée de l'opération.This lock prevents all user access to the underlying table for the duration of the operation. Une opération d'indexation hors ligne qui crée un index non cluster acquiert un verrou partagé (S, Shared) sur la table.An offline index operation that creates a nonclustered index acquires a Shared (S) lock on the table. Ce verrou empêche la mise à jour de la table sous-jacente, mais autorise les opérations de lecture, telles que des instructions SELECT.This lock prevents updates to the underlying table but allows read operations, such as SELECT statements. Les opérations de reconstruction de segment multithread sont autorisées.Multi-threaded heap rebuild operations are allowed.

Pour plus d’informations, consultez Fonctionnement des opérations d’index en ligne.For more information, see How Online Index Operations Work.

Notes

Les opérations d'index en ligne ne sont pas disponibles dans toutes les éditions de SQL ServerSQL Server.Online index operations are not available in every edition of SQL ServerSQL Server. Pour plus d’informations, consultez Éditions et fonctionnalités prises en charge de SQL Server 2016 et Éditions et fonctionnalités prises en charge de SQL Server 2017.For more information, see Editions and Supported Features for SQL Server 2016, and Editions and Supported Features for SQL Server 2017.

MOVE TO { partition_scheme_name ( column_name [ 1 , ... n] ) | filegroup | " default " }MOVE TO { partition_scheme_name(column_name [ 1 , ... n] ) | filegroup | " default " }
S’applique à : SQL ServerSQL Server (SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Spécifie un emplacement où déplacer les lignes de données actuellement au niveau feuille de l'index cluster.Specifies a location to move the data rows currently in the leaf level of the clustered index. La table est déplacée au nouvel emplacement.The table is moved to the new location. Cette option s'applique uniquement aux contraintes qui créent un index cluster.This option applies only to constraints that create a clustered index.

Notes

« default » n'est pas un mot clé dans ce contexte.In this context, default isn't a keyword. Il s’agit d’un identificateur du groupe de fichiers par défaut qui doit être délimité, comme dans MOVE TO " default " or MOVE TO [ default ] .It is an identifier for the default filegroup and must be delimited, as in MOVE TO " default " or MOVE TO [ default ]. Si " default " est spécifié, l’option QUOTED_IDENTIFIER doit être 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.

{ CHECK | NOCHECK } CONSTRAINT{ CHECK | NOCHECK } CONSTRAINT
Spécifie que constraint_name est activé ou désactivé.Specifies that constraint_name is enabled or disabled. Cette option peut être utilisée seulement avec les contraintes FOREIGN KEY et CHECK.This option can only be used with FOREIGN KEY and CHECK constraints. Lorsque NOCHECK est spécifié, la contrainte est désactivée ; les insertions et les mises à jour ultérieures de la colonne ne sont pas validées par rapport aux conditions de la contrainte.When NOCHECK is specified, the constraint is disabled and future inserts or updates to the column are not validated against the constraint conditions. Il n'est pas possible de désactiver les contraintes DEFAULT, PRIMARY KEY et UNIQUE.DEFAULT, PRIMARY KEY, and UNIQUE constraints can't be disabled.

ALLALL
Spécifie que toutes les contraintes sont désactivées à l’aide de l’option NOCHECK, ou bien activées à l’aide de l’option CHECK.Specifies that all constraints are either disabled with the NOCHECK option or enabled with the CHECK option.

{ ENABLE | DISABLE } TRIGGER{ ENABLE | DISABLE } TRIGGER
Spécifie que trigger_name est activé ou désactivé.Specifies that trigger_name is enabled or disabled. Lorsqu’un déclencheur est désactivé, il reste défini pour la table.When a trigger is disabled, it's still defined for the table. Toutefois, lorsque les instructions INSERT, UPDATE ou DELETE s’exécutent sur la table, aucune action n’est effectuée dans le déclencheur tant que ce dernier n’est pas réactivé.However, when INSERT, UPDATE, or DELETE statements run against the table, the actions in the trigger aren't carried out until the trigger is re-enabled.

ALLALL
Spécifie que tous les déclencheurs de la table sont activés ou désactivés.Specifies that all triggers in the table are enabled or disabled.

trigger_nametrigger_name
Spécifie le nom du déclencheur à activer ou à désactiver.Specifies the name of the trigger to disable or enable.

{ ENABLE | DISABLE } CHANGE_TRACKING{ ENABLE | DISABLE } CHANGE_TRACKING
S’applique à : SQL ServerSQL Server (SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Spécifie si le suivi des modifications est activé ou désactivé pour la table.Specifies whether change tracking is enabled disabled for the table. Par défaut, le suivi des modifications est désactivé.By default, change tracking is disabled.

Cette option est disponible uniquement lorsque le suivi des modifications est activé pour la base de données.This option is available only when change tracking is enabled for the database. Pour plus d’informations, consultez l’article Options SET d’ALTER DATABASE.For more information, see ALTER DATABASE SET Options.

Pour activer le suivi des modifications, la table doit avoir une clé primaire.To enable change tracking, the table must have a primary key.

WITH ( TRACK_COLUMNS_UPDATED = { ON | OFF } )WITH ( TRACK_COLUMNS_UPDATED = { ON | OFF } )
S’applique à : SQL ServerSQL Server (SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Spécifie, si le Moteur de base de donnéesDatabase Engine effectue un suivi des modifications, quelles colonnes de suivi des modifications ont été mises à jour.Specifies whether the Moteur de base de donnéesDatabase Engine tracks, which change tracked columns were updated. La valeur par défaut est OFF.The default value is OFF.

SWITCH [ PARTITION source_partition_number_expression ] TO [ schema_name .SWITCH [ PARTITION source_partition_number_expression ] TO [ schema_name. ] target_table [PARTITION target_partition_number_expression ]] target_table [ PARTITION target_partition_number_expression ]
S’applique à : SQL ServerSQL Server (SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Insère un bloc de données de l'une des manières suivantes :Switches a block of data in one of the following ways:

  • Réaffecte toutes les données d'une table en tant que partition d'une table partitionnée déjà existante.Reassigns all data of a table as a partition to an already-existing partitioned table.
  • Bascule une partition d'une table partitionnée vers une autre.Switches a partition from one partitioned table to another.
  • Réaffecte toutes les données d'une partition d'une table partitionnée à une table non partitionnée existante.Reassigns all data in one partition of a partitioned table to an existing non-partitioned table.

Si table est une table partitionnée, vous devez spécifier source_partition_number_expression.If table is a partitioned table, you must specify source_partition_number_expression. Si targe_table est une table partitionnée, vous devez spécifier source_partition_number_expression.If target_table is partitioned, you must specify target_partition_number_expression. Lors de la réaffectation des données d'une table en tant que partition à une table partitionnée déjà existante ou de basculement d'une partition d'une table partitionnée vers une autre, la partition cible doit exister et être vide.When reassigning a table's data as a partition to an already-existing partitioned table, or switching a partition from one partitioned table to another, the target partition must exist and it must be empty.

Lors de la réaffectation des données d'une partition pour constituer une seule table, la table cible doit déjà exister et être vide.When reassigning one partition's data to form a single table, the target table must already exist and it must be empty. La table ou la partition source ainsi que la table ou la partition cible doivent se trouver dans le même groupe de fichiers.Both the source table or partition, and the target table or partition, must be located in the same filegroup. Les index ou les partitions d'index correspondants doivent également se trouver dans le même groupe de fichiers.The corresponding indexes, or index partitions, must also be located in the same filegroup. De nombreuses autres restrictions s'appliquent au basculement des partitions.Many additional restrictions apply to switching partitions. table et target_table ne peuvent pas être identiques.table and target_table can't be the same. target_table peut être un identificateur en plusieurs parties.target_table can be a multi-part identifier.

source_partition_number_expression et target_partition_number_expression sont des expressions constantes qui peuvent référencer des variables et des fonctions.source_partition_number_expression and target_partition_number_expression are constant expressions that can reference variables and functions. y compris les variables et les fonctions définies par l'utilisateur.These include user-defined type variables and user-defined functions. Ces arguments ne peuvent pas référencer des expressions Transact-SQLTransact-SQL.They can't reference Transact-SQLTransact-SQL expressions.

Une table partitionnée avec un index columstore cluster se comporte comme un segment partitionné :A partitioned table with a clustered columstore index behaves like a partitioned heap:

  • La clé primaire doit inclure la clé de partition.The primary key must include the partition key.
  • Un index unique doit inclure la clé de partition.A unique index must include the partition key. Le fait d’inclure la clé de partition dans un index unique existant peut cependant changer l’unicité.But, including the partition key with an existing unique index can change the uniqueness.
  • Pour changer de partition, tous les index non-cluster doivent inclure la clé de partition.To switch partitions, all nonclustered indexes must include the partition key.

Pour plus d’informations sur les restrictions relatives à SWITCH lors de l’utilisation de la réplication, consultez Répliquer des tables et des index partitionnés.For SWITCH restriction when using replication, see Replicate Partitioned Tables and Indexes.

Les index columnstore non-clusters générés pour SQL ServerSQL Server 2016 CTP1 et pour SQL Database avant la version V12 présentaient un format en lecture seule.Nonclustered columnstore indexes built for SQL ServerSQL Server 2016 CTP1, and for SQL Database before version V12 were in a read-only format. Vous devez reconstruire les index columnstore non-cluster au format actuel (qui peut être mis à jour) avant de pouvoir exécuter une opération PARTITION.You must rebuild Nonclustered columnstore indexes to the current format (which is updatable) before any PARTITION operations can be run.

SET ( FILESTREAM_ON = { partition_scheme_name | filestream_filegroup_name | " default " | " NULL " } )SET ( FILESTREAM_ON = { partition_scheme_name | filestream_filegroup_name | " default " | " NULL " })
S’applique à : SQL ServerSQL Server (de SQL Server 2008SQL Server 2008 à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017). Azure SQL DatabaseAzure SQL Database ne prend pas en charge FILESTREAM.doesn't support FILESTREAM.

Spécifie où les données FILESTREAM sont stockées.Specifies where FILESTREAM data is stored.

ALTER TABLE avec la clause SET FILESTREAM_ON réussit uniquement si la table n'a pas de colonnes FILESTREAM.ALTER TABLE with the SET FILESTREAM_ON clause succeeds only if the table has no FILESTREAM columns. Vous pouvez ajouter des colonnes FILESTREAM en utilisant une deuxième instruction ALTER TABLE.You can add FILESTREAM columns by using a second ALTER TABLE statement.

Si vous spécifiez partition_scheme_name, les règles en vigueur pour CREATE TABLE s’appliquent.If you specify partition_scheme_name, the rules for CREATE TABLE apply. Assurez-vous que la table est déjà partitionnée pour les données de lignes et que son schéma de partition utilise les mêmes fonction et colonnes de partition que le schéma de partition FILESTREAM.Be sure the table is already partitioned for row data, and its partition scheme uses the same partition function and columns as the FILESTREAM partition scheme.

filestream_filegroup_name spécifie le nom d’un groupe de fichiers FILESTREAM.filestream_filegroup_name specifies the name of a FILESTREAM filegroup. Le groupe de fichiers doit avoir un fichier qui est défini pour le groupe de fichiers à l’aide d’une instruction CREATE DATABASE ou ALTER DATABASE ; sinon, une erreur se produit.The filegroup must have one file that's defined for the filegroup by using a CREATE DATABASE or ALTER DATABASE statement, or an error results.

" default " spécifie le groupe de fichiers FILESTREAM avec l’ensemble de propriétés DEFAULT." default " specifies the FILESTREAM filegroup with the DEFAULT property set. S'il n'y a aucun groupe de fichiers FILESTREAM, une erreur se produit.If there's no FILESTREAM filegroup, an error results.

" NULL " spécifie que toutes les références aux groupes de fichiers FILESTREAM pour la table sont supprimées." NULL " specifies that all references to FILESTREAM filegroups for the table are removed. Toutes les colonnes FILESTREAM doivent être supprimées en premier.All FILESTREAM columns must be dropped first. Utilisez SET FILESTREAM_ON =" NULL " pour supprimer toutes les données FILESTREAM associées à une table.Use SET FILESTREAM_ON =" NULL " to delete all FILESTREAM data that's associated with a table.

SET ( SYSTEM_VERSIONING = { OFF | ON [ ( HISTORY_TABLE = schema_name .SET ( SYSTEM_VERSIONING = { OFF | ON [ ( HISTORY_TABLE = schema_name . history_table_name [ , DATA_CONSISTENCY_CHECK = { ON | OFF } ]) ] } )history_table_name [ , DATA_CONSISTENCY_CHECK = { ON | OFF } ]) ] } )
S’applique à : SQL ServerSQL Server (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 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 ou désactive la gestion système des versions d’une table.Either disables or enables system versioning of a table. Pour activer la gestion système des versions d’une table, le système vérifie que le type de données, la contrainte de possibilité de valeur null et les spécifications de contrainte de clé primaire pour la gestion système des versions sont satisfaits.To enable system versioning of a table, the system verifies that the datatype, nullability constraint, and primary key constraint requirements for system versioning are met. Si vous n’utilisez pas l’argument HISTORY_TABLE, le système génère une nouvelle table d’historique qui correspond au schéma de la table actuelle, crée un lien entre les deux tables et permet au système d’enregistrer l’historique de chaque enregistrement dans la table actuelle de la table d’historique.If you don't use the HISTORY_TABLE argument, the system generates a new history table matching the schema of the current table, creates 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>. Si vous utilisez l’argument HISTORY_TABLE pour créer un lien vers une table d’historique existante et utiliser cette table, le système crée un lien entre la table actuelle et la table spécifiée.If you use the HISTORY_TABLE argument to create a link to and use an existing history table, the system creates a link between the current table and the specified table. 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 do 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 don't overlap. La vérification de cohérence des données est effectuée par défaut.Running the data consistency check is the default. Pour plus d’informations, voir Temporal Tables.For more information, see Temporal Tables.

HISTORY_RETENTION_PERIOD = { INFINITE | number {DAY | DAYS | WEEK | WEEKS | MONTH | MONTHS | YEAR | YEARS} }HISTORY_RETENTION_PERIOD = { INFINITE | number {DAY | DAYS | WEEK | WEEKS | MONTH | MONTHS | YEAR | YEARS} }
S’applique à  : SQL Server 2017 (14.x)SQL Server 2017 (14.x) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) and Azure SQL DatabaseAzure SQL Database.

Spécifie la rétention finie ou infinie des données d’historique dans une table temporelle.Specifies finite or infinite retention for historical data in a temporal table. Si vous l’omettez, la rétention infinie est appliquée.If omitted, infinite retention is assumed.

SET ( LOCK_ESCALATION = { AUTO | TABLE | DISABLE } )SET ( LOCK_ESCALATION = { AUTO | TABLE | DISABLE } )
S’applique à : SQL ServerSQL Server (SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Spécifie les méthodes autorisées d'escalade de verrous pour une table.Specifies the allowed methods of lock escalation for a table.

AUTOAUTO
Cette option permet au Moteur de base de données SQL ServerSQL Server Database Engine de sélectionner la granularité d'escalade de verrous appropriée pour le schéma de la table.This option allows Moteur de base de données SQL ServerSQL Server Database Engine to select the lock escalation granularity that's appropriate for the table schema.

  • Si la table est partitionnée, l'escalade de verrous est autorisée jusqu'au niveau de la partition.If the table is partitioned, lock escalation is allowed to partition. Une fois que l'escalade de verrous a atteint le niveau de la partition, elle n'est pas étendue à la granularité TABLE.After the lock is escalated to the partition level, the lock won't be escalated later to TABLE granularity.
  • Si la table n'est pas partitionnée, l'escalade de verrous continue jusqu'à la granularité TABLE.If the table isn't partitioned, the lock escalation is done to the TABLE granularity.

TABLETABLE
L'escalade de verrous continue jusqu'à la granularité TABLE, que la table soit ou non partitionnée.Lock escalation is done at table-level granularity whether the table is partitioned or not partitioned. TABLE est la valeur par défaut.TABLE is the default value.

DISABLEDISABLE
Empêche l'escalade de verrous dans la plupart des cas.Prevents lock escalation in most cases. Les verrous de niveau table ne sont pas totalement interdits.Table-level locks aren't completely disallowed. Par exemple, lorsque vous analysez une table ne contenant aucun index cluster sous le niveau d'isolation sérialisable, le Moteur de base de donnéesDatabase Engine doit prendre un verrou de table pour protéger l'intégrité des données.For example, when you're scanning a table that has no clustered index under the serializable isolation level, Moteur de base de donnéesDatabase Engine must take a table lock to protect data integrity.

REBUILDREBUILD
Utilisez la syntaxe REBUILD WITH pour reconstruire une table entière qui inclut toutes les partitions dans une table partitionnée.Use the REBUILD WITH syntax to rebuild an entire table including all the partitions in a partitioned table. Si la table a un index cluster, l'option REBUILD reconstruit l'index cluster.If the table has a clustered index, the REBUILD option rebuilds the clustered index. REBUILD peut être effectué en tant qu'opération ONLINE.REBUILD can be run as an ONLINE operation.

Utilisez la syntaxe REBUILD PARTITION pour reconstruire une partition unique dans une table partitionnée.Use the REBUILD PARTITION syntax to rebuild a single partition in a partitioned table.

PARTITION = ALLPARTITION = ALL
S’applique à : SQL ServerSQL Server (SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Reconstruit toutes les partitions lors de la modification des paramètres de compression de la partition.Rebuilds all partitions when changing the partition compression settings.

REBUILD WITH ( <rebuild_option> )REBUILD WITH ( <rebuild_option> )
Toutes les options s’appliquent à une table pourvue d’un index clusterAll options apply to a table with a clustered index. Si la table n'a pas d'index cluster, la structure de segment n'est affectée que par certaines options.If the table doesn't have a clustered index, the heap structure is only affected by some of the options.

Lorsqu'un paramètre de compression spécifique n'est pas spécifié avec l'opération REBUILD, le paramètre de compression actuel est utilisé pour la partition.When a specific compression setting isn't specified with the REBUILD operation, the current compression setting for the partition is used. Pour retourner la valeur actuelle, interrogez la colonne data_compression dans la vue de catalogue sys.partitions.To return the current setting, query the data_compression column in the sys.partitions catalog view.

Pour une description complète des options de reconstruction, consultez l’article index_option.For complete descriptions of the rebuild options, see index_option.

DATA_COMPRESSIONDATA_COMPRESSION
S’applique à : SQL ServerSQL Server (SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

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:

NONE La table ou les partitions spécifiées ne sont pas compressées.NONE Table or specified partitions aren't compressed. Cette option ne s'applique pas aux tables columnstore.This option doesn't apply to columnstore tables.

ROW La table ou les partitions spécifiées sont compressées au moyen de la compression de ligne.ROW Table or specified partitions are compressed by using row compression. Cette option ne s'applique pas aux tables columnstore.This option doesn't apply to columnstore tables.

PAGE La table ou les partitions spécifiées sont compressées au moyen de la compression de page.PAGE Table or specified partitions are compressed by using page compression. Cette option ne s'applique pas aux tables columnstore.This option doesn't apply to columnstore tables.

COLUMNSTORECOLUMNSTORE
S’applique à : SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) jusqu’à 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.

S'applique uniquement aux tables columnstore.Applies only to columnstore tables. COLUMNSTORE spécifie qu'il faut décompresser une partition compressée à l'aide de l'option COLUMNSTORE_ARCHIVE.COLUMNSTORE specifies to decompress a partition that was compressed with the COLUMNSTORE_ARCHIVE option. Lorsque les données sont restaurées, elles continuent à être compressées à l'aide de la compression columnstore utilisée pour toutes les tables columnstore.When the data is restored, it continues to be compressed with the columnstore compression that's used for all columnstore tables.

COLUMNSTORE_ARCHIVECOLUMNSTORE_ARCHIVE
S’applique à : SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) jusqu’à 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.

S'applique uniquement aux tables columnstore, qui sont des tables stockées avec un index cluster columnstore.Applies only to columnstore tables, which are tables stored with a clustered columnstore index. COLUMNSTORE_ARCHIVE compressera davantage la partition spécifiée en une plus petite taille.COLUMNSTORE_ARCHIVE will further compress the specified partition to a smaller size. Utilisez cette option pour l'archivage, ou pour d'autres situations qui nécessitent moins de stockage et supportent plus de temps pour le stockage et la récupération.Use this option for archival or other situations that require less storage and can afford more time for storage and retrieval.

Pour reconstruire plusieurs partitions en même temps, consultez l’article index_option.To rebuild multiple partitions at the same time, see index_option. Si la table n'a pas d'index cluster, la modification de la compression de données reconstruit le segment de mémoire et les index non-cluster.If the table doesn't have a clustered index, changing the data compression rebuilds the heap and the nonclustered indexes. Pour plus d’informations sur la compression, consultez Compression des données.For more information about compression, see Data Compression.

ONLINE = { ON | OFF } <as applies to single_partition_rebuild_option>ONLINE = { ON | OFF } <as applies to single_partition_rebuild_option>
Spécifie si une seule partition des tables sous-jacentes et les index associés sont disponibles pour modifier des requêtes et des données pendant l'opération d'index.Specifies whether a single partition of the underlying tables and associated indexes is available for queries and data modification during the index operation. La valeur par défaut est OFF.The default is OFF. Vous pouvez exécuter REBUILD en tant qu’opération ONLINE.You can run REBUILD as an ONLINE operation.

ONON
Les verrous de table à long terme ne sont pas maintenus pendant la durée de l'opération d'index.Long-term table locks aren't held for the duration of the index operation. Un verrou S sur la table est requis au début de la reconstruction de l'index, et un verrou Sch-M sur la table à la fin de la reconstruction de l'index en ligne.S-lock on the table is required in the beginning of the index rebuild and a Sch-M lock on the table at the end of the online index rebuild. Bien que les deux verrous soient des verrous de métadonnées courtes, le verrou Sch-M doit attendre que toutes les transactions bloquantes soient terminées.Although both locks are short metadata locks, the Sch-M lock must wait for all blocking transactions to be completed. Pendant le temps d'attente, le verrou Sch-M bloque toutes les autres transactions qui attendent derrière ce verrou en cas d'accès à la même table.During the wait time,, the Sch-M lock blocks all other transactions that wait behind this lock when accessing the same table.

Notes

La reconstruction d’index en ligne peut définir les options low_priority_lock_wait décrites plus loin dans cette section.Online index rebuild can set the low_priority_lock_wait options described later in this section.

OFFOFF
Des verrous de table sont appliqués pendant l'opération d'indexation.Table locks are applied for the duration of the index operation. Cela empêche tous les utilisateurs d'accéder à la table sous-jacente pendant la durée de l'opération.This prevents all user access to the underlying table for the duration of the operation.

column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNScolumn_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
S’applique à : SQL ServerSQL Server (SQL Server 2008SQL Server 2008 jusqu’à SQL Server 2017SQL Server 2017) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Nom du jeu de colonnes.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. Un jeu de colonnes ne peut pas être ajouté à une table qui contient des colonnes éparses.A column set can't be added to a table that contains sparse columns. 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.

{ ENABLE | DISABLE } FILETABLE_NAMESPACE{ ENABLE | DISABLE } FILETABLE_NAMESPACE
S’applique à : SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) jusqu’à 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).

Active ou désactive les contraintes définies par le système sur un FileTable.Enables or disables the system-defined constraints on a FileTable. Peut être utilisé uniquement avec un FileTable.Can only be used with a FileTable.

SET ( FILETABLE_DIRECTORY = directory_name )SET ( FILETABLE_DIRECTORY = directory_name )
S’applique à : SQL ServerSQL Server ) SQL Server 2012 (11.x)SQL Server 2012 (11.x) jusqu’à 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.doesn't support FILETABLE.

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, malgré les paramètres de classement SQL.Uniqueness comparison is case-insensitive, despite the SQL collation settings. Peut être utilisé uniquement avec un FileTable.Can only be used with a FileTable.

 SET (
        REMOTE_DATA_ARCHIVE
        {
            = ON (<table_stretch_options> )
          | = OFF_WITHOUT_DATA_RECOVERY
          ( MIGRATION_STATE = PAUSED ) | ( <table_stretch_options> [, ...n] )
        } )

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

Active ou désactive Stretch Database pour une table.Enables or disables Stretch Database for a table. Pour plus d'informations, consultez Stretch Database.For more information, see Stretch Database.

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

Quand vous activez Stretch pour une table en spécifiant ON, vous devez aussi 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 also have to 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 information 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 information, 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.

Désactivation de Stretch Database pour une tableDisabling Stretch Database for a table

Quand vous désactivez Stretch pour une table, vous avez deux options pour les données distantes qui ont déjà été migrées vers Azure.When you disable Stretch for a table, you have two options for the remote data that's already been migrated to Azure. Pour plus d’informations, consultez Désactiver Stretch Database et récupérer les données distantes.For more information, see Disable Stretch Database and bring back remote data.

  • Pour désactiver Stretch pour une table et copier les données distantes pour la table d'Azure vers SQL Server, exécutez la commande suivante.To disable Stretch for a table and copy the remote data for the table from Azure back to SQL Server, run the following command. Cette commande ne peut pas être annulée.This command can't be canceled.

    ALTER TABLE <table_name>
       SET ( REMOTE_DATA_ARCHIVE ( MIGRATION_STATE = INBOUND ) ) ;
    

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. Pour plus d'informations, consultez la rubrique Détails de la tarification des transferts de données.For more information, see Data Transfers Pricing Details.

Une fois que toutes les données distantes ont été copiées d'Azure vers SQL Server, Stretch est désactivée pour la table.After all the remote data has been copied from Azure back to SQL Server, Stretch is disabled for the table.

  • Pour désactiver Stretch pour une table et abandonner les données distantes, exécutez la commande suivante.To disable Stretch for a table and abandon the remote data, run the following command.

    ALTER TABLE <table_name>
       SET ( REMOTE_DATA_ARCHIVE = OFF_WITHOUT_DATA_RECOVERY ( MIGRATION_STATE = PAUSED ) ) ;
    

Après avoir désactivé Stretch Database pour une table, la migration des données s’arrête et les résultats de la requête n'incluent plus les résultats de la table distante.After you disable Stretch Database for a table, data migration stops and query results no longer include results from the remote table.

La désactivation de Stretch ne supprime pas la table distante.Disabling Stretch doesn't remove the remote table. Si vous souhaitez supprimer la table distante, vous devez utiliser le Portail Azure.If you want to delete the remote table, you drop it by using the Azure portal.

[ FILTER_PREDICATE = { null | predicate } ][ FILTER_PREDICATE = { null | predicate } ]
S’applique à: SQL ServerSQL Server (deSQL Server 2017 (14.x)SQL Server 2017 (14.x) à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2017 (14.x)SQL Server 2017 (14.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 les articles Activer Stretch Database pour une table et Sélectionner les lignes à migrer à l’aide d’une fonction de filtre(Stretch Database).For more information, see Enable Stretch Database for a table and Select rows to migrate by using a filter function - Stretch Database.

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 (deSQL Server 2017 (14.x)SQL Server 2017 (14.x) à SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2017 (14.x)SQL Server 2017 (14.x) through SQL Server 2017SQL Server 2017).

WAIT_AT_LOW_PRIORITYWAIT_AT_LOW_PRIORITY
S’applique à : SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) jusqu’à 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.

Une reconstruction d'index en ligne doit attendre les opérations de blocage sur cette table.An online index rebuild has to wait for blocking operations on this table. WAIT_AT_LOW_PRIORITY indique que l’opération de reconstruction de l’index en ligne attend les verrous de faible priorité, permettant à d’autres opérations de continuer pendant que l’opération de construction de l’index en ligne patiente.WAIT_AT_LOW_PRIORITY indicates that the online index rebuild operation waits for low-priority locks, allowing other operations to carry on while the online index build operation is waiting. L’omission de l’option WAIT AT LOW PRIORITY est identique à WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).Omitting the WAIT AT LOW PRIORITY option is the same as WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).

MAX_DURATION = time [MINUTES ]MAX_DURATION = time [MINUTES ]
S’applique à : SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) jusqu’à 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.

Le temps d’attente, qui est une valeur entière spécifiée en minutes, pendant lequel le SWITCH ou les verrous de reconstruction d’index en ligne attendent avec une basse priorité lors de l’exécution de la commande DDL.The wait time, which is an integer value specified in minutes, that the SWITCH or online index rebuild locks wait with low priority when running the DDL command. Si l’opération est bloquée pendant le temps MAX_DURATION, l’une des actions ABORT_AFTER_WAIT est exécutée.If the operation is blocked for the MAX_DURATION time, one of the ABORT_AFTER_WAIT actions will run. La durée MAX_DURATION est toujours indiquée en minutes et vous pouvez omettre le mot MINUTES.MAX_DURATION time is always in minutes, and you can omit the word MINUTES.

ABORT_AFTER_WAIT = [NONE | SELF | BLOCKERS } ]ABORT_AFTER_WAIT = [NONE | SELF | BLOCKERS } ]
S’applique à : SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) jusqu’à 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.

AucuneNONE
Continuez à attendre le verrou avec la priorité normale.Continue waiting for the lock with normal (regular) priority.

SELFSELF
Quitter le SWITCH ou l’opération DDL de reconstruction de l’index en ligne actuellement exécutée sans effectuer aucune action.Exit the SWITCH or online index rebuild DDL operation currently being run without taking any action.

BLOCKERSBLOCKERS
Annuler toutes les transactions utilisateur qui bloquent actuellement le SWITCH ou l’opération DDL de reconstruction de l’index en ligne afin que l’opération puisse continuer.Kill all user transactions that currently block the SWITCH or online index rebuild DDL operation so that the operation can continue.

Nécessite l’autorisation ALTER ANY CONNECTION.Requires ALTER ANY CONNECTION permission.

IF EXISTSIF EXISTS
S’applique à : SQL ServerSQL Server (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 ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Azure SQL DatabaseAzure SQL Database.

Supprime de manière conditionnelle la colonne ou contrainte uniquement si elle existe déjà.Conditionally drops the column or constraint only if it already exists.

NotesRemarks

Pour ajouter de nouvelles lignes de données, utilisez l’instruction INSERT.To add new rows of data, use INSERT. Pour supprimer des lignes de données, utilisez les instructions DELETE ou TRUNCATE TABLE.To remove rows of data, use DELETE or TRUNCATE TABLE. Pour modifier des valeurs sur les lignes existantes, utilisez l’instruction UPDATE.To change the values in existing rows, use UPDATE.

Si le cache de procédures contient des plans d'exécution qui référencent la table, ALTER TABLE les marque de façon à les recompiler lors de leur prochaine exécution.If there are any execution plans in the procedure cache that reference the table, ALTER TABLE marks them to be recompiled on their next execution.

Modification de la taille d'une colonneChanging the Size of a Column

Vous pouvez modifier la longueur, l'échelle ou la précision d'une colonne en spécifiant une nouvelle taille pour le type de données de la colonne.You can change the length, precision, or scale of a column by specifying a new size for the column data type. Utilisez la clause ALTER COLUMN.Use the ALTER COLUMN clause. Si des données existent dans la colonne, la nouvelle taille ne peut pas être inférieure à la taille maximale des données.If data exists in the column, the new size can't be smaller than the maximum size of the data. De même, vous ne pouvez pas définir la colonne dans un index, sauf si la colonne est un type de données varchar, nvarchar ou varbinary et que l’index n’est pas le résultat d’une contrainte PRIMARY KEY.Also, you can't define the column in an index, unless the column is a varchar, nvarchar, or varbinary data type and the index isn't the result of a PRIMARY KEY constraint. Consultez l’exemple dans la courte section intitulée Modification d’une définition de colonne.See the example in the short section titled Altering a Column Definition.

Verrous et ALTER TABLELocks and ALTER TABLE

Les modifications que vous spécifiez dans l’instruction ALTER TABLE sont implémentées immédiatement.Changes you specify in ALTER TABLE implement immediately. Si elles nécessitent une modification des lignes de la table, ALTER TABLE met les lignes à jour.If the changes require modifications of the rows in the table, ALTER TABLE updates the rows. ALTER TABLE acquiert un verrou (SCH-M) de modification du schéma sur la table pour garantir qu'aucune autre connexion ne référence même les métadonnées de la table pendant la modification, à l'exception des opérations d'index en ligne qui nécessitent un verrouillage court de type SCH-M à la fin.ALTER TABLE acquires a schema modify (SCH-M) lock on the table to make sure that no other connections reference even the metadata for the table during the change, except online index operations that require a short SCH-M lock at the end. Dans une opération ALTER TABLE...SWITCH, le verrou est acquis à la fois sur la table source et sur la table cible.In an ALTER TABLE...SWITCH operation, the lock is acquired on both the source and target tables. Les modifications effectuées sur la table sont consignées dans un journal et peuvent être récupérées entièrement.The modifications made to the table are logged and fully recoverable. Les modifications qui affectent toutes les lignes d’une grande table de dimension, telles que la suppression d’une colonne ou, dans certaines éditions de SQL ServerSQL Server, l’ajout d’une colonne NOT NULL avec une valeur par défaut, peuvent demander beaucoup de temps, tant pour s’exécuter que pour générer un grand nombre d’enregistrements dans le journal des transactions.Changes that affect all the rows in large tables, such as dropping a column or, on some editions of SQL ServerSQL Server, adding a NOT NULL column with a default value, can take a long time to complete and generate many log records. Exécutez ces instructions ALTER TABLE avec le même soin que toute instruction INSERT, UPDATE ou DELETE qui affecte un grand nombre de lignes.Run these ALTER TABLE statements with the same care as any INSERT, UPDATE, or DELETE statement that affects many rows.

Ajout de colonnes NOT NULL en tant qu'opération en ligneAdding NOT NULL Columns as an Online Operation

À partir de SQL Server 2012 (11.x)SQL Server 2012 (11.x) Enterprise Edition, l’ajout d’une colonne NOT NULL avec une valeur par défaut est une opération en ligne quand la valeur par défaut est une constante d’exécution.Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x) Enterprise Edition, adding a NOT NULL column with a default value is an online operation when the default value is a runtime constant. Cela signifie que l'opération est terminée presque instantanément malgré le nombre de lignes dans la table.This means that the operation is completed almost instantaneously despite the number of rows in the table. Parce que les lignes existantes dans la table ne sont pas mises à jour pendant l’opération.Because, the existing rows in the table aren't updated during the operation. À la place, la valeur par défaut est stockée uniquement dans les métadonnées de la table et la valeur se trouve autant que nécessaire dans les requêtes qui accèdent à ces lignes.Instead, the default value is stored only in the metadata of the table and the value is looked up, as needed, in queries that access these rows. Ce comportement est automatique.This behavior is automatic. Aucune syntaxe supplémentaire n'est nécessaire pour implémenter l'opération en ligne au-delà de la syntaxe COLUMN ADD.No additional syntax is required to implement the online operation beyond the ADD COLUMN syntax. Une constante d'exécution est une expression qui produit la même valeur au moment de l'exécution pour chaque ligne dans la table malgré son déterminisme.A runtime constant is an expression that produces the same value at runtime for each row in the table despite its determinism. Par exemple, l'expression constante « mes données temporaires », ou la fonction système GETUTCDATETIME () sont des constantes d'exécution.For example, the constant expression "My temporary data", or the system function GETUTCDATETIME() are runtime constants. Par opposition, les fonctions NEWID() ou NEWSEQUENTIALID() ne sont pas des constantes d’exécution car une valeur unique est produite pour chaque ligne de la table.In contrast, the functions NEWID() or NEWSEQUENTIALID() aren't runtime constants, because a unique value is produced for each row in the table. L'ajout d'une colonne NOT NULL avec une valeur par défaut qui n'est pas une constante de runtime est toujours exécuté hors connexion et un verrou (SCH-M) exclusif est acquis pour la durée de l'opération.Adding a NOT NULL column with a default value that's not a runtime constant is always run offline and an exclusive (SCH-M) lock is acquired for the duration of the operation.

Alors que les lignes existantes référencent la valeur stockée dans les métadonnées, la valeur par défaut est stockée dans la ligne pour toutes les nouvelles lignes qui sont insérées et ne spécifient pas d’autre valeur pour la colonne.While the existing rows reference the value stored in metadata, the default value is stored on the row for any new rows that are inserted and don't specify another value for the column. La valeur par défaut stockée dans les métadonnées se déplace vers une ligne existante lorsque la ligne est mise à jour (même si la colonne réelle n'est pas spécifiée dans l'instruction UPDATE), ou si la table ou l'index cluster est régénéré.The default value stored in metadata moves to an existing row when the row is updated (even if the actual column isn't specified in the UPDATE statement), or if the table or clustered index is rebuilt.

Les colonnes de type varchar(max) , nvarchar(max) , varbinary(max) , xml, text, ntext, image, hierarchyid, geometry, geography ou de types CLR définis par l’utilisateur ne peuvent pas être ajoutées dans une opération en ligne.Columns of type varchar(max), nvarchar(max), varbinary(max), xml, text, ntext, image, hierarchyid, geometry, geography, or CLR UDTS, can't be added in an online operation. Une colonne ne peut pas être ajoutée en ligne si cela entraîne le dépassement de la limite de 8 060 octets pour la taille de la ligne.A column can't be added online if doing so causes the maximum possible row size to exceed the 8,060-byte limit. Dans ce cas, la colonne est ajoutée en tant que traitement en différé.The column is added as an offline operation in this case.

Exécution d'un plan en parallèleParallel Plan Execution

Dans Microsoft SQL Server 2012 EnterpriseMicrosoft SQL Server 2012 Enterprise et versions ultérieures, le nombre de processeurs utilisés pour exécuter une instruction ALTER TABLE ADD (basée sur un index) CONSTRAINT ou DROP (index cluster) CONSTRAINT est déterminé par l’option de configuration Degré maximal de parallélisme et par la charge de travail en cours.In Microsoft SQL Server 2012 EnterpriseMicrosoft SQL Server 2012 Enterprise and higher, the number of processors employed to run a single ALTER TABLE ADD (index-based) CONSTRAINT or DROP (clustered index) CONSTRAINT statement is determined by the max degree of parallelism configuration option and the current workload. Si le Moteur de base de donnéesDatabase Engine détecte que le système est occupé, le degré de parallélisme de l'opération est automatiquement diminué avant le démarrage de l'exécution de l'instruction.If the Moteur de base de donnéesDatabase Engine detects that the system is busy, the degree of parallelism of the operation is automatically reduced before statement execution starts. Vous pouvez configurer manuellement le nombre de processeurs utilisés pour exécuter l'instruction en spécifiant l'option MAXDOP.You can manually configure the number of processors that are used to run the statement by specifying the MAXDOP option. Pour plus d’informations, consultez Configurer l’option de configuration du serveur max degree of parallelism.For more information, see Configure the max degree of parallelism Server Configuration Option.

Tables partitionnéesPartitioned Tables

Outre les opérations SWITCH qui impliquent des tables partitionnées, utilisez ALTER TABLE pour modifier l'état des colonnes, des contraintes et des déclencheurs d'une table partitionnée, de la même manière que pour les tables non partitionnées.In addition to performing SWITCH operations that involve partitioned tables, use ALTER TABLE to change the state of the columns, constraints, and triggers of a partitioned table just like it's used for nonpartitioned tables. Cependant, cette instruction ne peut pas être utilisée pour modifier la façon dont la table elle-même est partitionnée.However, this statement can't be used to change the way the table itself is partitioned. Pour repartitionner une table partitionnée, utilisez les instructions ALTER PARTITION SCHEME et ALTER PARTITION FUNCTION.To repartition a partitioned table, use ALTER PARTITION SCHEME and ALTER PARTITION FUNCTION. De plus, vous ne pouvez pas modifier le type de données d'une colonne d'une table partitionnée.Additionally, you can't change the data type of a column of a partitioned table.

Restrictions sur les tables comportant des vues liées au schémaRestrictions on Tables with Schema-Bound Views

Les restrictions applicables aux instructions ALTER TABLE dans les tables comportant des vues liées au schéma sont identiques à celles qui s'appliquent à la modification de tables comportant un index simple.The restrictions that apply to ALTER TABLE statements on tables with schema-bound views are the same as the restrictions currently applied when modifying tables with a simple index. L'ajout d'une colonne est autorisé.Adding a column is allowed. Cependant, la suppression ou la modification d'une colonne intervenant dans une vue associée à un schéma n'est pas autorisée.However, removing or changing a column that participates in any schema-bound view isn't allowed. Si l'instruction ALTER TABLE requiert la modification d'une colonne utilisée dans une vue liée au schéma, ALTER TABLE échoue et le Moteur de base de donnéesDatabase Engine génère un message d'erreur.If the ALTER TABLE statement requires changing a column used in a schema-bound view, ALTER TABLE fails and the Moteur de base de donnéesDatabase Engine raises an error message. Pour plus d’informations sur la liaison aux schémas et sur les vues indexées, consultez l’article CREATE VIEW.For more information about schema binding and indexed views, see CREATE VIEW.

L'ajout ou la suppression de déclencheurs sur les tables de base n'est pas affectée par la création d'une vue liée au schéma comportant des références aux tables.Adding or removing triggers on base tables isn't affected by creating a schema-bound view that references the tables.

Index et ALTER TABLEIndexes and ALTER TABLE

Tout index créé dans le cadre d'une contrainte est supprimé lorsque cette dernière est supprimée.Indexes created as part of a constraint are dropped when the constraint is dropped. Un index créé au moyen de l'instruction CREATE INDEX doit être supprimé à l'aide de l'instruction DROP INDEX.Indexes that were created with CREATE INDEX must be dropped with DROP INDEX. Utilisez l'instruction ALTER INDEX pour reconstruire un index faisant partie de la définition d'une contrainte ; il n'est pas nécessaire de supprimer la contrainte et de l'ajouter à nouveau à l'aide de l'instruction ALTER TABLE.Use The ALTER INDEX statement to rebuild an index part of a constraint definition; the constraint doesn't have to be dropped and added again with ALTER TABLE.

Tous les index et contraintes basés sur une colonne doivent être supprimés avant que la colonne puisse être supprimée.All indexes and constraints based on a column must be removed before the column can be removed.

Lorsque vous supprimez une contrainte qui a créé un index cluster, les lignes de données stockées au niveau feuille de l'index cluster sont stockées dans une table non-cluster.When you delete a constraint that created a clustered index, the data rows that were stored in the leaf level of the clustered index are stored in a nonclustered table. Vous pouvez supprimer l'index cluster et déplacer la table résultante vers un autre groupe de fichiers ou schéma de partition dans une transaction unique en spécifiant l'option MOVE TO.You can drop the clustered index and move the resulting table to another filegroup or partition scheme in a single transaction by specifying the MOVE TO option. Cette option est soumise aux restrictions suivantes :The MOVE TO option has the following restrictions:

  • MOVE TO n'est pas valide pour les vues non indexées ou les index non-cluster.MOVE TO isn't valid for indexed views or nonclustered indexes.
  • Le schéma de partition ou le groupe de fichiers doit déjà exister.The partition scheme or filegroup must already exist.
  • Si MOVE TO n'est pas spécifié, la table est placée dans le même schéma de partition ou groupe de fichiers qui a été défini pour l'index cluster.If MOVE TO isn't specified, the table is located in the same partition scheme or filegroup as was defined for the clustered index.

Quand vous supprimez un index cluster, spécifiez l’option ONLINE = ON afin que la transaction DROP INDEX ne bloque pas les requêtes et les modifications des données sous-jacentes et des index non-cluster associés.When you drop a clustered index, specify the ONLINE = ON option so the DROP INDEX transaction doesn't block queries and modifications to the underlying data and associated nonclustered indexes.

L’option ONLINE = ON est soumise aux restrictions suivantes :ONLINE = ON has the following restrictions:

  • ONLINE = ON n’est pas valide pour les index cluster qui sont également désactivés.ONLINE = ON isn't valid for clustered indexes that are also disabled. Les index désactivés doivent être supprimés au moyen de ONLINE = OFF.Disabled indexes must be dropped by using ONLINE = OFF.
  • Un seul index peut être supprimé à la fois.Only one index at a time can be dropped.
  • ONLINE = ON n’est pas valide pour les vues indexées, les index non-cluster ou les index sur des tables temporaires locales.ONLINE = ON isn't valid for indexed views, nonclustered indexes, or indexes on local temp tables.
  • ONLINE = ON n’est pas valide pour les index columnstore.ONLINE = ON isn't valid for columnstore indexes.

Pour supprimer un index cluster, l'espace disque temporaire doit être égal à la taille de l'index cluster existant.Temporary disk space equal to the size of the existing clustered index is required to drop a clustered index. Cet espace supplémentaire est libéré dès que l'opération est terminée.This additional space is released as soon as the operation is completed.

Notes

Les options répertoriées sous <drop_clustered_constraint_option> s’appliquent aux index cluster des tables et ne peuvent pas être appliquées aux index cluster des vues ou aux index non-cluster.The options listed under <drop_clustered_constraint_option> apply to clustered indexes on tables and can't be applied to clustered indexes on views or nonclustered indexes.

Réplication des modifications de schémaReplicating Schema Changes

Lorsque vous exécutez l'instruction ALTER TABLE sur une table publiée d'un serveur de publication SQL ServerSQL Server, par défaut, cette modification est propagée à tous les Abonnés SQL ServerSQL Server.When you run ALTER TABLE on a published table at a SQL ServerSQL Server Publisher, by default, that change propagates to all SQL ServerSQL Server Subscribers. Cette fonctionnalité comporte des restrictions.This functionality has some restrictions. Vous pouvez la désactiver.You can disable it. Pour plus d’informations, consultez Modifier le schéma dans les bases de données de publication.For more information, see Make Schema Changes on Publication Databases.

Data CompressionData Compression

Les tables système ne peuvent pas être activées pour la compression.System tables can't be enabled for compression. Si la table est un segment de mémoire, l'opération de reconstruction pour le mode ONLINE sera monothread.If the table is a heap, the rebuild operation for ONLINE mode will be single threaded. Utilisez le mode OFFLINE pour une opération de reconstruction de segment de mémoire multithread.Use OFFLINE mode for a multi-threaded heap rebuild operation. Pour plus d’informations sur la compression de données, consultez Compression des données.For a more information about data compression, seeData 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.

Les restrictions suivantes s'appliquent aux tables partitionnées :The following restrictions apply to partitioned tables:

  • Vous ne pouvez pas modifier le paramètre de compression d'une partition unique si la table possède des index non alignés.You can't change the compression setting of a single partition if the table has nonaligned indexes.
  • La syntaxe ALTER TABLE <table> REBUILD PARTITION ... reconstruit la partition spécifiée.The ALTER TABLE <table> REBUILD PARTITION ... syntax rebuilds the specified partition.
  • La syntaxe ALTER TABLE <table> REBUILD WITH ... reconstruit toutes les partitions.The ALTER TABLE <table> REBUILD WITH ... syntax rebuilds all partitions.

Suppression de colonnes NTEXTDropping NTEXT Columns

Lors de la suppression de colonnes NTEXT, le nettoyage des données supprimées se produit en tant qu'opération sérialisée sur toutes les lignes.When dropping NTEXT columns, the cleanup of the deleted data occurs as a serialized operation on all rows. Le nettoyage peut prendre beaucoup de temps.The cleanup can require a large amount of time. Lorsque vous supprimez une colonne NTEXT dans une table contenant beaucoup de lignes, mettez à jour la colonne NTEXT avec la valeur NULL au préalable, puis supprimez la colonne.When dropping an NTEXT column in a table with lots of rows, update the NTEXT column to NULL value first, then drop the column. Vous pouvez exécuter cette option avec des opérations parallèles et la rendre beaucoup plus rapide.You can run this option with parallel operations and make it much faster.

Reconstruction d'index en ligneOnline Index Rebuild

Pour exécuter l'instruction DDL pour une reconstruction d'index en ligne, toutes les transactions bloquantes actives qui s'exécutent sur une table particulière doivent être terminées.To run the DDL statement for an online index rebuild, all active blocking transactions running on a particular table must be completed. Lorsque la reconstruction d'index en ligne est lancée, elle bloque toutes les nouvelles transactions qui sont prêtes à s'exécuter sur cette table.When the online index rebuild launches, it blocks all new transactions that are ready to start running on this table. Bien que la durée du verrou pour la reconstruction de l'index en ligne soit courte, le fait d'attendre que toutes les transactions ouvertes sur une table spécifique soient exécutées, et le fait de bloquer les nouvelles transactions qui doivent démarrer, peuvent avoir un impact important sur le débit.Although the duration of the lock for online index rebuild is short, waiting for all open transactions on a given table to complete and blocking the new transactions to start, might significantly affect the throughput. Ceci peut entraîner un ralentissement ou un délai d'expiration de la charge de travail et limiter significativement l’accès à la table sous-jacente.This can cause a workload slow-down or timeout and significantly limit access to the underlying table. L’option WAIT_AT_LOW_PRIORITY permet aux administrateurs de base de données de gérer les verrous S et Sch-M nécessaires pour les reconstructions d’index en ligne, et de sélectionner l’une des trois options.The WAIT_AT_LOW_PRIORITY option allows DBAs to manage the S-lock and Sch-M locks required for online index rebuilds and lets them to select one of three options. Dans les trois cas, si aucune activité n’est bloquante pendant le temps d’attente ((MAX_DURATION =n [minutes])), la reconstruction d’index en ligne est exécutée immédiatement, sans attendre, et l’instruction DDL est effectuée.In all three cases, if during the wait time ( (MAX_DURATION =n [minutes]) ) there are no blocking activities, the online index rebuild is run immediately without waiting and the DDL statement is completed.

Prise en charge de la compatibilitéCompatibility Support

L'instruction ALTER TABLE prend en charge uniquement les noms de tables en deux parties (schema.object).The ALTER TABLE statement supports only two-part (schema.object) table names. Dans SQL Server 2017SQL Server 2017, la spécification d'un nom de table à l'aide des formats suivants échoue au moment de la compilation, avec l'erreur 117.In SQL Server 2017SQL Server 2017, specifying a table name using the following formats fails at compile time with error 117.

  • server.database.schema.tableserver.database.schema.table
  • .database.schema.table.database.schema.table
  • ..schema.table..schema.table

Dans les versions antérieures, la spécification du format server.database.schema.table retournait l'erreur 4902.In earlier versions, specifying the format server.database.schema.table returned error 4902. La spécification du format .database.schema.table ou .schema.table aboutissait.Specifying the format .database.schema.table or the format ..schema.table succeeded.

Pour résoudre le problème, supprimez l'utilisation d'un préfixe en quatre parties.To resolve the problem, remove the use of a four-part prefix.

AutorisationsPermissions

Requiert une autorisation ALTER sur la table.Requires ALTER permission on the table.

Les autorisations ALTER TABLE s'appliquent aux tables mises en œuvre dans une instruction ALTER TABLE SWITCH.ALTER TABLE permissions apply to both tables involved in an ALTER TABLE SWITCH statement. Toute donnée basculée hérite de la sécurité de la table cible.Any data that's switched inherits the security of the target table.

Si vous avez défini des colonnes dans l'instruction ALTER TABLE avec un type CLR défini par l'utilisateur ou un type de données alias, l'autorisation REFERENCES sur le type est requise.If you've defined any columns in the ALTER TABLE statement to be of a common language runtime (CLR) user-defined type or alias data type, REFERENCES permission on the type is required.

L’ajout d’une colonne qui met à jour les lignes de la table nécessite l’autorisation UPDATE sur la table.Adding a column that updates the rows of the table requires UPDATE permission on the table. Par exemple, l’ajout d’une colonne NOT NULL avec une valeur par défaut ou l’ajout d’une colonne d’identité quand la table n’est pas vide.For example, adding a NOT NULL column with a default value or adding an identity column when the table isn't empty.

ExemplesExamples

CatégorieCategory Éléments syntaxiques proposésFeatured syntax elements
Ajout de colonnes et de contraintesAdding columns and constraints ADD • PRIMARY KEY avec des options d'index • colonnes éparses et jeux de colonnes •ADD • PRIMARY KEY with index options • sparse columns and column sets •
Suppression de colonnes et de contraintesDropping columns and constraints DROPDROP
Modification d’une définition de colonneAltering a column definition changement de type de données • changement de taille de colonne • classementchange data type • change column size • collation
Modification d’une définition de tableAltering a table definition DATA_COMPRESSION • SWITCH PARTITION • ESCALATION • suivi des modificationsDATA_COMPRESSION • SWITCH PARTITION • LOCK ESCALATION • change tracking
Désactivation et activation des contraintes et des déclencheursDisabling and enabling constraints and triggers CHECK • NO CHECK • ENABLE TRIGGER • DISABLE TRIGGERCHECK • NO CHECK • ENABLE TRIGGER • DISABLE TRIGGER
   

Ajout de colonnes et de contraintesAdding Columns and Constraints

Les exemples fournis dans cette section expliquent comment ajouter des colonnes et des contraintes à une table.Examples in this section demonstrate adding columns and constraints to a table.

A.A. Ajout d'une nouvelle colonneAdding a new column

L'exemple suivant ajoute une colonne qui accepte les valeurs NULL et pour laquelle aucune valeur n'est spécifiée via une définition DEFAULT.The following example adds a column that allows null values and has no values provided through a DEFAULT definition. Dans la nouvelle colonne, chaque ligne aura la valeur NULL.In the new column, each row will have NULL.

CREATE TABLE dbo.doc_exa (column_a INT) ;
GO
ALTER TABLE dbo.doc_exa ADD column_b VARCHAR(20) NULL ;
GO

B.B. Ajout d'une colonne avec une contrainteAdding a column with a constraint

L'exemple suivant ajoute une nouvelle colonne avec une contrainte UNIQUE.The following example adds a new column with a UNIQUE constraint.

CREATE TABLE dbo.doc_exc (column_a INT) ;
GO
ALTER TABLE dbo.doc_exc ADD column_b VARCHAR(20) NULL
    CONSTRAINT exb_unique UNIQUE ;
GO
EXEC sp_help doc_exc ;
GO
DROP TABLE dbo.doc_exc ;
GO

C.C. Ajout d'une contrainte CHECK non vérifiée à une colonne existanteAdding an unverified CHECK constraint to an existing column

L'exemple suivant ajoute une contrainte à une colonne existante de la table.The following example adds a constraint to an existing column in the table. La colonne comporte une valeur qui ne respecte pas la contrainte.The column has a value that violates the constraint. Par conséquent, WITH NOCHECK empêche la validation de la contrainte sur les lignes existantes, et permet l'ajout de la contrainte.Therefore, WITH NOCHECK is used to prevent the constraint from being validated against existing rows, and to allow for the constraint to be added.

CREATE TABLE dbo.doc_exd ( column_a INT) ;
GO
INSERT INTO dbo.doc_exd VALUES (-1) ;
GO
ALTER TABLE dbo.doc_exd WITH NOCHECK
ADD CONSTRAINT exd_check CHECK (column_a > 1) ;
GO
EXEC sp_help doc_exd ;
GO
DROP TABLE dbo.doc_exd ;
GO

D.D. Ajout d'une contrainte DEFAULT à une colonne existanteAdding a DEFAULT constraint to an existing column

L'exemple suivant crée une table de deux colonnes et insère une valeur dans la première ; l'autre colonne conserve la valeur NULL.The following example creates a table with two columns and inserts a value into the first column, and the other column remains NULL. Une contrainte DEFAULT est alors ajoutée à la deuxième colonne.A DEFAULT constraint is then added to the second column. Pour vérifier que la valeur par défaut est appliquée, une autre valeur est insérée dans la première colonne et la table fait l'objet d'une requête.To verify that the default is applied, another value is inserted into the first column, and the table is queried.

CREATE TABLE dbo.doc_exz ( column_a INT, column_b INT) ;
GO
INSERT INTO dbo.doc_exz (column_a)VALUES ( 7 ) ;
GO
ALTER TABLE dbo.doc_exz
  ADD CONSTRAINT col_b_def
  DEFAULT 50 FOR column_b ;
GO
INSERT INTO dbo.doc_exz (column_a) VALUES ( 10 ) ;
GO
SELECT * FROM dbo.doc_exz ;
GO
DROP TABLE dbo.doc_exz ;
GO

E.E. Ajout de plusieurs colonnes avec des contraintesAdding several columns with constraints

L'exemple suivant ajoute plusieurs colonnes avec des contraintes définies.The following example adds several columns with constraints defined with the new column. La première colonne a la propriété IDENTITY.The first new column has an IDENTITY property. Chaque ligne de la table a de nouvelles valeurs incrémentielles dans la colonne d'identité.Each row in the table has new incremental values in the identity column.

CREATE TABLE dbo.doc_exe ( column_a INT CONSTRAINT column_a_un UNIQUE) ;
GO
ALTER TABLE dbo.doc_exe ADD

-- Add a PRIMARY KEY identity column.
column_b INT IDENTITY
CONSTRAINT column_b_pk PRIMARY KEY,

-- Add a column that references another column in the same table.
column_c INT NULL
CONSTRAINT column_c_fk
REFERENCES doc_exe(column_a),

-- Add a column with a constraint to enforce that
-- nonnull data is in a valid telephone number format.
column_d VARCHAR(16) NULL
CONSTRAINT column_d_chk
CHECK
(column_d LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' OR
column_d LIKE
'([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'),

-- Add a nonnull column with a default.
column_e DECIMAL(3,3)
CONSTRAINT column_e_default
DEFAULT .081 ;
GO
EXEC sp_help doc_exe ;
GO
DROP TABLE dbo.doc_exe ;
GO

F.F. Ajout d'une colonne acceptant les valeurs NULL, avec des valeurs par défautAdding a nullable column with default values

L'exemple suivant ajoute une colonne qui accepte les valeurs NULL, avec une définition DEFAULT. Il utilise l'option WITH VALUES pour spécifier des valeurs pour chaque ligne existante de la table.The following example adds a nullable column with a DEFAULT definition, and uses WITH VALUES to provide values for each existing row in the table. Si l'option WITH VALUES n'est pas utilisée, chaque ligne a la valeur NULL dans la nouvelle colonne.If WITH VALUES isn't used, each row has the value NULL in the new column.

CREATE TABLE dbo.doc_exf ( column_a INT) ;
GO
INSERT INTO dbo.doc_exf VALUES (1) ;
GO
ALTER TABLE dbo.doc_exf
ADD AddDate smalldatetime NULL
CONSTRAINT AddDateDflt
DEFAULT GETDATE() WITH VALUES ;
GO
DROP TABLE dbo.doc_exf ;
GO

G.G. Création d’une contrainte PRIMARY KEY avec des options d’index ou de compression des donnéesCreating a PRIMARY KEY constraint with index or data compression options

L'exemple suivant crée la contrainte PRIMARY KEY PK_TransactionHistoryArchive_TransactionID et définit les options FILLFACTOR, ONLINE et PAD_INDEX.The following example creates the PRIMARY KEY constraint PK_TransactionHistoryArchive_TransactionID and sets the options FILLFACTOR, ONLINE, and PAD_INDEX. L'index cluster généré portera le même nom que la contrainte.The resulting clustered index will have the same name as the constraint.

S’applique à : SQL Server 2008SQL Server 2008 à SQL Server 2017SQL Server 2017 et Azure SQL DatabaseAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL DatabaseAzure SQL Database.

USE AdventureWorks;
GO
ALTER TABLE Production.TransactionHistoryArchive WITH NOCHECK
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID)
WITH (FILLFACTOR = 75, ONLINE = ON, PAD_INDEX = ON);
GO

Cet exemple similaire applique la compression de page lors de l’application de la clé primaire en cluster.This similar example applies page compression while applying the clustered primary key.

USE AdventureWorks;
GO
ALTER TABLE Production.TransactionHistoryArchive WITH NOCHECK
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID)
WITH (DATA_COMPRESSION = PAGE);
GO

H.H. Ajout d'une colonne éparseAdding a sparse column

Les exemples suivants illustrent l'ajout et la modification des colonnes éparses dans la table T1.The following examples show adding and modifying sparse columns in table T1. Le code pour créer la table T1 est comme suit.The code to create table T1 is as follows.

CREATE TABLE T1
(C1 int PRIMARY KEY,
C2 varchar(50) SPARSE NULL,
C3 int SPARSE NULL,
C4 int ) ;
GO

Pour ajouter une colonne éparse supplémentaire C5, exécutez l'instruction suivante.To add an additional sparse column C5, execute the following statement.

ALTER TABLE T1
ADD C5 char(100) SPARSE NULL ;
GO

Pour convertir la colonne non éparse C4 en colonne éparse, exécutez l'instruction suivante.To convert the C4 non-sparse column to a sparse column, execute the following statement.

ALTER TABLE T1
ALTER COLUMN C4 ADD SPARSE ;
GO

Pour convertir la colonne éparse C4 en colonne non éparse, exécutez l’instruction suivante.To convert the C4 sparse column to a nonsparse column, execute the following statement.

ALTER TABLE T1
ALTER COLUMN C4 DROP SPARSE;
GO

I.I. Ajout d'un jeu de colonnesAdding a column set

Les exemples suivants montrent comment ajouter une colonne à la table T2.The following examples show adding a column to table T2. Un jeu de colonnes ne peut pas être ajouté à une table qui contient déjà des colonnes éparses.A column set can't be added to a table that already contains sparse columns. Le code pour créer la table T2 est comme suit.The code to create table T2 is as follows.

CREATE TABLE T2
(C1 int PRIMARY KEY,
C2 varchar(50) NULL,
C3 int NULL,
C4 int ) ;
GO

Les trois instructions suivantes ajoutent un jeu de colonnes nommé CS, puis changent les colonnes C2 et C3 en SPARSE.The following three statements add a column set named CS, and then modify columns C2 and C3 to SPARSE.

ALTER TABLE T2
ADD CS XML COLUMN_SET FOR ALL_SPARSE_COLUMNS ;
GO

ALTER TABLE T2
ALTER COLUMN C2 ADD SPARSE ;
GO

ALTER TABLE T2
ALTER COLUMN C3 ADD SPARSE ;
GO

J.J. Ajout d’une colonne chiffréeAdding an encrypted column

L’instruction suivante ajoute une colonne chiffrée nommée PromotionCode.The following statement adds an encrypted column named PromotionCode.

ALTER TABLE Customers ADD
    PromotionCode nvarchar(100)
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,
    ENCRYPTION_TYPE = RANDOMIZED,
    ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') ;

Suppression de colonnes et de contraintesDropping Columns and Constraints

Les exemples fournis dans cette section expliquent comme supprimer des colonnes et des contraintes.The examples in this section demonstrate dropping columns and constraints.

A.A. Suppression d'une ou plusieurs colonnesDropping a column or columns

Le premier exemple supprime une colonne dans une table.The first example modifies a table to remove a column. Le second exemple supprime plusieurs colonnes.The second example removes multiple columns.

CREATE TABLE dbo.doc_exb
    (column_a INT
     ,column_b VARCHAR(20) NULL
     ,column_c datetime
     ,column_d int) ;
GO  
-- Remove a single column.
ALTER TABLE dbo.doc_exb DROP COLUMN column_b ;
GO
-- Remove multiple columns.
ALTER TABLE dbo.doc_exb DROP COLUMN column_c, column_d;

B.B. Suppression de contraintes et de colonnesDropping constraints and columns

Le premier exemple supprime une contrainte UNIQUE d'une table.The first example removes a UNIQUE constraint from a table. Le second exemple supprime deux contraintes et une seule colonne.The second example removes two constraints and a single column.

CREATE TABLE dbo.doc_exc ( column_a int NOT NULL CONSTRAINT my_constraint UNIQUE) ;
GO

-- Example 1. Remove a single constraint.
ALTER TABLE dbo.doc_exc DROP my_constraint ;
GO

DROP TABLE dbo.doc_exc;
GO

CREATE TABLE dbo.doc_exc ( column_a int
                          NOT NULL CONSTRAINT my_constraint UNIQUE
                          ,column_b int
                          NOT NULL CONSTRAINT my_pk_constraint PRIMARY KEY) ;
GO

-- Example 2. Remove two constraints and one column
-- The keyword CONSTRAINT is optional. The keyword COLUMN is required.
ALTER TABLE dbo.doc_exc

    DROP CONSTRAINT my_constraint, my_pk_constraint, COLUMN column_b ;
GO

C.C. Suppression d'une contrainte PRIMARY KEY en mode ONLINEDropping a PRIMARY KEY constraint in the ONLINE mode

L'exemple suivant supprime une contrainte PRIMARY KEY avec l'option ONLINE ayant pour valeur ON.The following example deletes a PRIMARY KEY constraint with the ONLINE option set to ON.

ALTER TABLE Production.TransactionHistoryArchive
DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID
WITH (ONLINE = ON);
GO

D.D. Ajout et suppression d'une contrainte FOREIGN KEYAdding and dropping a FOREIGN KEY constraint

L'exemple suivant crée la table ContactBackup, puis la modifie en ajoutant d'abord une contrainte FOREIGN KEY qui référence la table Person.Person, puis en supprimant la contrainte FOREIGN KEY.The following example creates the table ContactBackup, and then alters the table, first by adding a FOREIGN KEY constraint that references the table Person.Person, then by dropping the FOREIGN KEY constraint.

CREATE TABLE Person.ContactBackup
    (ContactID int) ;
GO

ALTER TABLE Person.ContactBackup
ADD CONSTRAINT FK_ContactBackup_Contact FOREIGN KEY (ContactID)
    REFERENCES Person.Person (BusinessEntityID) ;
GO

ALTER TABLE Person.ContactBackup
DROP CONSTRAINT FK_ContactBackup_Contact ;
GO

DROP TABLE Person.ContactBackup ;

Icône de flèche utilisée avec le lien Retour au début ExemplesArrow icon used with Back to Top link Examples

Modification d’une définition de colonneAltering a Column Definition

A.A. Modification du type de données d'une colonneChanging the data type of a column

L'exemple suivant modifie le type d'une colonne d'une table de INT en DECIMAL.The following example changes a column of a table from INT to DECIMAL.

CREATE TABLE dbo.doc_exy (column_a INT ) ;
GO
INSERT INTO dbo.doc_exy (column_a) VALUES (10) ;
GO
ALTER TABLE dbo.doc_exy ALTER COLUMN column_a DECIMAL (5, 2) ;
GO
DROP TABLE dbo.doc_exy ;
GO

B.B. Modification de la taille d’une colonneChanging the size of a column

L’exemple suivant augmente la taille d’une colonne varchar ainsi que la précision et l’échelle d’une colonne decimal.The following example increases the size of a varchar column and the precision and scale of a decimal column. Dans la mesure où les colonnes contiennent des données, la taille de colonne peut uniquement être augmentée.Because the columns contain data, the column size can only be increased. Remarquez aussi que col_a est défini dans un index unique.Also notice that col_a is defined in a unique index. La taille de col_a peut encore être augmentée car le type de données est un varchar et l’index n’est pas le résultat d’une contrainte PRIMARY KEY.The size of col_a can still be increased because the data type is a varchar and the index isn't the result of a PRIMARY KEY constraint.

-- Create a two-column table with a unique index on the varchar column.
CREATE TABLE dbo.doc_exy ( col_a varchar(5) UNIQUE NOT NULL, col_b decimal (4,2));
GO
INSERT INTO dbo.doc_exy VALUES ('Test', 99.99);
GO
-- Verify the current column size.
SELECT name, TYPE_NAME(system_type_id), max_length, precision, scale
FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.doc_exy');
GO
-- Increase the size of the varchar column.
ALTER TABLE dbo.doc_exy ALTER COLUMN col_a varchar(25);
GO
-- Increase the scale and precision of the decimal column.
ALTER TABLE dbo.doc_exy ALTER COLUMN col_b decimal (10,4);
GO
-- Insert a new row.
INSERT INTO dbo.doc_exy VALUES ('MyNewColumnSize', 99999.9999) ;
GO
-- Verify the current column size.
SELECT name, TYPE_NAME(system_type_id), max_length, precision, scale
FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.doc_exy');

C.C. Modification du classement des colonnesChanging column collation

L'exemple suivant indique comment modifier le classement d'une colonne.The following example shows how to change the collation of a column. En premier lieu, une table est créée avec le classement de l’utilisateur par défaut.First, a table is created table with the default user collation.

CREATE TABLE T3
(C1 int PRIMARY KEY,
C2 varchar(50) NULL,
C3 int NULL,
C4 int ) ;
GO

Ensuite, le classement C2 de la colonne est modifié en Latin1_General_BIN.Next, column C2 collation is changed to Latin1_General_BIN. Le type de données est obligatoire, bien qu'il ne soit pas modifié.The data type is required, even though it isn't changed.

ALTER TABLE T3
ALTER COLUMN C2 varchar(50) COLLATE Latin1_General_BIN;
GO

D.D. Chiffrement d’une colonneEncrypting a column

L’exemple suivant montre comment chiffrer une colonne à l’aide d’Always Encrypted avec enclaves sécurisées.The following example shows how to encrypt a column using Always Encrypted with secure enclaves.

Tout d’abord, une table est créée sans aucune colonne chiffrée.First, a table is created without any encrypted columns.

CREATE TABLE T3
(C1 int PRIMARY KEY,
C2 varchar(50) NULL,
C3 int NULL,
C4 int ) ;
GO

Ensuite, la colonne « C2 » est chiffrée avec une clé de chiffrement de colonne, nommée CEK1, et un chiffrement aléatoire.Next, column 'C2' is encrypted with a column encryption key, named CEK1, and randomized encryption. Pour que l’instruction suivante réussisse :For the following statement to succeed:

  • la clé de chiffrement de colonne doit prendre en charge les enclaves.The column encryption key must be enclave-enabled. Ceci signifie qu’elle doit être chiffrée avec une clé principale de colonne qui permet des calculs d’enclave.Meaning, it must be encrypted with a column master key that allows enclave computations.
  • L’instance SQL Server cible doit prendre en charge Always Encrypted avec des enclaves sécurisées.The target SQL Server instance must support Always Encrypted with secure enclaves.
  • L’instruction doit être émise via une connexion définie pour Always Encrypted avec des enclaves sécurisées et à l’aide d’un pilote de client pris en charge.The statement must be issued over a connection set up for Always Encrypted with secure enclaves, and using a supported client driver.
  • L’application appelante doit avoir accès à la clé principale de colonne protégeant CEK1.The calling application must have access to the column master key, protecting CEK1.
ALTER TABLE T3
ALTER COLUMN C2 varchar(50) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL;
GO

Modification d’une définition de tableAltering a Table Definition

Les exemples présentés dans cette section montrent comment modifier la définition d'une table.The examples in this section demonstrate how to alter the definition of a table.

A.A. Modification d'une table pour modifier la compressionModifying a table to change the compression

L'exemple suivant modifie la compression d'une table non partitionnée.The following example changes the compression of a nonpartitioned table. Le segment de mémoire ou l'index cluster sera reconstruit.The heap or clustered index will be rebuilt. Si la table est un segment, tous les index non cluster associés à la table sont reconstruits.If the table is a heap, all nonclustered indexes will be rebuilt.

ALTER TABLE T1
REBUILD WITH (DATA_COMPRESSION = PAGE);

L'exemple suivant modifie la compression d'une table partitionnée.The following example changes the compression of a partitioned table. La syntaxe REBUILD PARTITION = 1 provoque uniquement la reconstruction de la partition numéro 1.The REBUILD PARTITION = 1 syntax causes only partition number 1 to be rebuilt.

S’applique à : SQL Server 2008SQL Server 2008 à SQL Server 2017SQL Server 2017 et Azure SQL DatabaseAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL DatabaseAzure SQL Database.

ALTER TABLE PartitionTable1
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION =NONE) ;
GO

La même opération utilisant la syntaxe suivante provoque la reconstruction de toutes les partitions dans la table.The same operation using the following alternate syntax causes all partitions in the table to be rebuilt.

S’applique à : SQL Server 2008SQL Server 2008 à SQL Server 2017SQL Server 2017 et Azure SQL DatabaseAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL DatabaseAzure SQL Database.

ALTER TABLE PartitionTable1
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE ON PARTITIONS(1) ) ;

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

B.B. Modification d'une table columnstore pour modifier la compression d'archivageModifying a columnstore table to change archival compression

L'exemple suivant compresse davantage une partition de table columnstore en appliquant un algorithme de compression supplémentaire.The following example further compresses a columnstore table partition by applying an additional compression algorithm. Cette compression réduit la taille de la table, mais augmente également le temps nécessaire pour le stockage et la récupération.This compression reduces the table to a smaller size, but also increases the time required for storage and retrieval. Cela est utile pour l'archivage, ou d'autres situations qui nécessitent moins d'espace de stockage et supportent plus de temps pour le stockage et la récupération.This is useful for archiving or for situations that require less space and can afford more time for storage and retrieval.

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

ALTER TABLE PartitionTable1
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE) ;
GO

L’exemple ci-après décompresse une partition de table columnstore compressée à l’aide de l’option COLUMNSTORE_ARCHIVE.The following example decompresses a columnstore table partition that was compressed with COLUMNSTORE_ARCHIVE option. Lorsque les données sont restaurées, elles continuent à être compressées à l'aide de la compression columnstore utilisée pour toutes les tables columnstore.When the data is restored, it will continue to be compressed with the columnstore compression that's used for all columnstore tables.

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

ALTER TABLE PartitionTable1
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION =COLUMNSTORE) ;
GO

C.C. Basculement de partitions entre des tablesSwitching partitions between tables

L'exemple suivant crée une table partitionnée, en partant du principe que le schéma de partition myRangePS1 est déjà créé dans la base de données.The following example creates a partitioned table, assuming that partition scheme myRangePS1 is already created in the database. Ensuite, une table non partitionnée est créée avec la même structure que la table partitionnée et sur le même groupe de fichiers que PARTITION 2 de la table PartitionTable.Next, a non-partitioned table is created with the same structure as the partitioned table and on the same filegroup as PARTITION 2 of table PartitionTable. Les données de PARTITION 2 de la table PartitionTable sont ensuite basculées dans la table NonPartitionTable.The data of PARTITION 2 of table PartitionTable is then switched into table NonPartitionTable.

CREATE TABLE PartitionTable (col1 int, col2 char(10))
ON myRangePS1 (col1) ;
GO
CREATE TABLE NonPartitionTable (col1 int, col2 char(10))
ON test2fg ;
GO
ALTER TABLE PartitionTable SWITCH PARTITION 2 TO NonPartitionTable ;
GO

D.D. Autorisation de l'escalade de verrous sur les tables partitionnéesAllowing lock escalation on partitioned tables

L'exemple suivant autorise l'escalade de verrous au niveau de la partition sur une table partitionnée.The following example enables lock escalation to the partition level on a partitioned table. Si la table n'est pas partitionnée, l'escalade de verrous est définie au niveau TABLE.If the table isn't partitioned, lock escalation is set at the TABLE level.

S’applique à : SQL Server 2008SQL Server 2008 à SQL Server 2017SQL Server 2017 et Azure SQL DatabaseAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL DatabaseAzure SQL Database.

ALTER TABLE dbo.T1 SET (LOCK_ESCALATION = AUTO);
GO

E.E. Configuration du suivi des modifications sur une tableConfiguring change tracking on a table

L'exemple suivant active le suivi des modifications sur la table Person.Person.The following example enables change tracking on the Person.Person table.

S’applique à : SQL Server 2008SQL Server 2008 à SQL Server 2017SQL Server 2017 et Azure SQL DatabaseAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL DatabaseAzure SQL Database.

USE AdventureWorks;
ALTER TABLE Person.Person
ENABLE CHANGE_TRACKING;

L'exemple ci-dessous active le suivi des modifications ainsi que le suivi des colonnes qui sont mises à jour lors d'une modification.The following example enables change tracking and enables the tracking of the columns that are updated during a change.

S'applique à: SQL Server 2008SQL Server 2008 jusqu'à SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

USE AdventureWorks;
GO
ALTER TABLE Person.Person
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON)

L'exemple suivant désactive le suivi des modifications sur la table Person.Person.The following example disables change tracking on the Person.Person table.

S’applique à : SQL Server 2008SQL Server 2008 à SQL Server 2017SQL Server 2017 et Azure SQL DatabaseAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL DatabaseAzure SQL Database.

USE AdventureWorks;
Go
ALTER TABLE Person.Person
DISABLE CHANGE_TRACKING;

Désactivation et activation des contraintes et des déclencheursDisabling and Enabling Constraints and Triggers

A.A. Désactivation et réactivation d'une contrainteDisabling and re-enabling a constraint

L'exemple suivant désactive la contrainte définissant les salaires pouvant être inclus dans les données.The following example disables a constraint that limits the salaries accepted in the data. L'option NOCHECK CONSTRAINT est utilisée avec ALTER TABLE pour désactiver la contrainte et permettre une insertion qui entraîne généralement une violation de la contrainte.NOCHECK CONSTRAINT is used with ALTER TABLE to disable the constraint and allow for an insert that would typically violate the constraint. CHECK CONSTRAINT réactive la contrainte.CHECK CONSTRAINT re-enables the constraint.

CREATE TABLE dbo.cnst_example
(id INT NOT NULL,
 name VARCHAR(10) NOT NULL,
 salary MONEY NOT NULL
    CONSTRAINT salary_cap CHECK (salary < 100000)
);

-- Valid inserts
INSERT INTO dbo.cnst_example VALUES (1,'Joe Brown',65000);
INSERT INTO dbo.cnst_example VALUES (2,'Mary Smith',75000);

-- This insert violates the constraint.
INSERT INTO dbo.cnst_example VALUES (3,'Pat Jones',105000);

-- Disable the constraint and try again.
ALTER TABLE dbo.cnst_example NOCHECK CONSTRAINT salary_cap;
INSERT INTO dbo.cnst_example VALUES (3,'Pat Jones',105000);

-- Re-enable the constraint and try another insert; this will fail.
ALTER TABLE dbo.cnst_example CHECK CONSTRAINT salary_cap;
INSERT INTO dbo.cnst_example VALUES (4,'Eric James',110000) ;

B.B. Désactivation et réactivation d'un déclencheurDisabling and re-enabling a trigger

L'exemple suivant utilise l'option DISABLE TRIGGER de l'instruction ALTER TABLE pour désactiver le déclencheur et autoriser une insertion qui ne respecte normalement pas le déclencheur.The following example uses the DISABLE TRIGGER option of ALTER TABLE to disable the trigger and allow for an insert that would typically violate the trigger. ENABLE TRIGGER est ensuite utilisée pour réactiver le déclencheur.ENABLE TRIGGER is then used to re-enable the trigger.

CREATE TABLE dbo.trig_example
(id INT,
name VARCHAR(12),
salary MONEY) ;
GO
-- Create the trigger.
CREATE TRIGGER dbo.trig1 ON dbo.trig_example FOR INSERT
AS
IF (SELECT COUNT(*) FROM INSERTED
WHERE salary > 100000) > 0
BEGIN
    print 'TRIG1 Error: you attempted to insert a salary > $100,000'
    ROLLBACK TRANSACTION
END ;
GO
-- Try an insert that violates the trigger.
INSERT INTO dbo.trig_example VALUES (1,'Pat Smith',100001) ;
GO
-- Disable the trigger.
ALTER TABLE dbo.trig_example DISABLE TRIGGER trig1 ;
GO
-- Try an insert that would typically violate the trigger.
INSERT INTO dbo.trig_example VALUES (2,'Chuck Jones',100001) ;
GO
-- Re-enable the trigger.
ALTER TABLE dbo.trig_example ENABLE TRIGGER trig1 ;
GO
-- Try an insert that violates the trigger.
INSERT INTO dbo.trig_example VALUES (3,'Mary Booth',100001) ;
GO

Opérations en ligneOnline Operations

A.A. Reconstruction d'index en ligne à l'aide d'options d'attente à basse prioritéOnline index rebuild using low-priority wait options

L'exemple suivant montre comment effectuer une reconstruction d'index en ligne qui spécifie les options d'attente à basse priorité.The following example shows how to perform an online index rebuild specifying the low-priority wait options.

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

ALTER TABLE T1
REBUILD WITH
(
    PAD_INDEX = ON,
    ONLINE = ON ( WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 4 MINUTES,
                                         ABORT_AFTER_WAIT = BLOCKERS ) )
)
;

B.B. Modification de colonne en ligneOnline Alter Column

L'exemple suivant montre comment exécuter une opération de modification de colonne avec l'option ONLINE.The following example shows how to run an alter column operation with the ONLINE option.

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.

CREATE TABLE dbo.doc_exy (column_a INT ) ;
GO
INSERT INTO dbo.doc_exy (column_a) VALUES (10) ;
GO
ALTER TABLE dbo.doc_exy
    ALTER COLUMN column_a DECIMAL (5, 2) WITH (ONLINE = ON);
GO
sp_help doc_exy;
DROP TABLE dbo.doc_exy ;
GO

Gestion système des versionsSystem Versioning

Les quatre exemples ci-dessous vous aideront à vous familiariser avec la syntaxe d’utilisation de la gestion système des versions.The following four examples will help you become familiar with the syntax for using system versioning. Pour obtenir une assistance supplémentaire, consultez Prise en main des tables temporelles avec versions gérées par le système.For additional assistance, see Getting Started with System-Versioned Temporal Tables.

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.

A.A. Ajouter la gestion système des versions à des tables existantesAdd System Versioning to Existing Tables

L’exemple suivant montre comment ajouter la gestion système des versions à une table existante, et comment créer une table d’historique future.The following example shows how to add system versioning to an existing table and create a future history table. Cet exemple part du principe qu’il existe une table nommée InsurancePolicy avec une clé primaire définie.This example assumes that there's an existing table called InsurancePolicy with a primary key defined. Cet exemple remplit les colonnes de période nouvellement créées pour la gestion système des versions à l’aide des valeurs par défaut pour les heures de début et de fin, car ces valeurs ne peuvent pas être Null.This example populates the newly created period columns for system versioning using default values for the start and end times because these values can't be null. Cet exemple utilise la clause HIDDEN pour s’assurer qu’il n’y a aucun impact sur les applications existantes interagissant avec la table active.This example uses the HIDDEN clause to ensure no impact on existing applications interacting with the current table. Il utilise également HISTORY_RETENTION_PERIOD, qui est disponible uniquement sur SQL DatabaseSQL Database.It also uses HISTORY_RETENTION_PERIOD that's available on SQL DatabaseSQL Database only.

--Alter non-temporal table to define periods for system versioning
ALTER TABLE InsurancePolicy
ADD PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime),
SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL
    DEFAULT SYSUTCDATETIME(),
SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL
    DEFAULT CONVERT(DATETIME2, '9999-12-31 23:59:59.99999999');

--Enable system versioning with 1 year retention for historical data
ALTER TABLE InsurancePolicy
SET (SYSTEM_VERSIONING = ON (HISTORY_RETENTION_PERIOD = 1 YEAR));

B.B. Migrer une solution existante pour utiliser la gestion système des versionsMigrate An Existing Solution to Use System Versioning

L’exemple suivant montre comment migrer vers la gestion système des versions à partir d’une solution qui utilise des déclencheurs pour reproduire la prise en charge temporelle.The following example shows how to migrate to system versioning from a solution that uses triggers to mimic temporal support. Il part du principe qu’il existe une solution qui utilise une table ProjectTask et une table ProjectTaskHistory, qui utilise les colonnes Changed Date et Revised Date comme périodes, que ces colonnes de période n’utilisent pas le type de données datetime2 et que la table ProjectTask a une clé primaire définie.The example assumes there's an existing solution that uses a ProjectTask table and a ProjectTaskHistory table for its existing solution, that's uses the Changed Date and Revised Date columns for its periods, that these period columns don't use the datetime2 datatype and that the ProjectTask table has a primary key defined.

-- Drop existing trigger
DROP TRIGGER ProjectTask_HistoryTrigger;

-- Adjust the schema for current and history table
-- Change data types for existing period columns
ALTER TABLE ProjectTask ALTER COLUMN [Changed Date] datetime2 NOT NULL;
ALTER TABLE ProjectTask ALTER COLUMN [Revised Date] datetime2 NOT NULL;
ALTER TABLE ProjectTaskHistory ALTER COLUMN [Changed Date] datetime2 NOT NULL;
ALTER TABLE ProjectTaskHistory ALTER COLUMN [Revised Date] datetime2 NOT NULL;

-- Add SYSTEM_TIME period and set system versioning with linking two existing tables
-- (a certain set of data checks happen in the background)
ALTER TABLE ProjectTask
ADD PERIOD FOR SYSTEM_TIME ([Changed Date], [Revised Date])

ALTER TABLE ProjectTask
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.ProjectTaskHistory, DATA_CONSISTENCY_CHECK = ON))

C.C. Désactivation et réactivation de la gestion système des versions pour changer le schéma de tableDisabling and Re-Enabling System Versioning to Change Table Schema

Cet exemple montre comment désactiver la gestion système des versions sur la table Department, ajouter une colonne et réactiver la gestion système des versions.This example shows how to disable system versioning on the Department table, add a column, and re-enable system versioning. La désactivation de la gestion système des versions est nécessaire pour modifier le schéma de table.Disabling system versioning is required to modify the table schema. Effectuez ces étapes dans une transaction pour empêcher les mises à jour des deux tables lors de la mise à jour du schéma de table, ce qui permet à l’administrateur de base de données d’ignorer la vérification de cohérence des données pendant la réactivation de la gestion système des versions et d’obtenir un gain de performances.Do these steps within a transaction to prevent updates to both tables while updating the table schema, which enables the DBA to skip the data consistency check when re-enabling system versioning and gain a performance benefit. Les tâches telles que la création de statistiques, le changement de partition ou la compression de l’une ou des deux tables ne nécessitent pas la désactivation de la gestion système des versions.Tasks such as creating statistics, switching partitions, or applying compression to one or both tables doesn't require disabling system versioning.

BEGIN TRAN
/* Takes schema lock on both tables */
ALTER TABLE Department
    SET (SYSTEM_VERSIONING = OFF);
/* expand table schema for temporal table */
ALTER TABLE Department  
     ADD Col5 int NOT NULL DEFAULT 0;
/* Expand table schema for history table */
ALTER TABLE DepartmentHistory
    ADD Col5 int NOT NULL DEFAULT 0;
/* Re-establish versioning again*/
ALTER TABLE Department
    SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE=dbo.DepartmentHistory,
                                 DATA_CONSISTENCY_CHECK = OFF));
COMMIT

D.D. Suppression de la gestion système des versionsRemoving System Versioning

Cet exemple montre comment supprimer complètement la gestion système des versions de la table Department, et comment supprimer la table DepartmentHistory.This example shows how to completely remove system versioning from the Department table and drop the DepartmentHistory table. Si vous le souhaitez, vous pouvez aussi supprimer les colonnes de période utilisées par le système pour enregistrer les informations de gestion système des versions.Optionally, you might also want to drop the period columns used by the system to record system versioning information. Vous ne pouvez pas supprimer les tables Department ou DepartmentHistory pendant que la gestion système des versions est activée.You can't drop either the Department or the DepartmentHistory tables while system versioning is enabled.

ALTER TABLE Department
    SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE Department
DROP PERIOD FOR SYSTEM_TIME;
DROP TABLE DepartmentHistory;

Exemples : Azure SQL Data WarehouseAzure SQL Data Warehouse et Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

Les exemples suivants A à C utilisent la table FactResellerSales dans la base de données AdventureWorksPDW2012AdventureWorksPDW2012.The following examples A through C use the FactResellerSales table in the AdventureWorksPDW2012AdventureWorksPDW2012 database.

A.A. Déterminer si une table est partitionnéeDetermining if a table is partitioned

La requête suivante renvoie une ou plusieurs lignes si la table FactResellerSales est partitionnée.The following query returns one or more rows if the table FactResellerSales is partitioned. Si la table n'est pas partitionnée, aucune ligne n'est retournée.If the table isn't partitioned, no rows are returned.

SELECT * FROM sys.partitions AS p
JOIN sys.tables AS t
    ON p.object_id = t.object_id
WHERE p.partition_id IS NOT NULL
    AND t.name = 'FactResellerSales';

B.B. Déterminer les valeurs limites pour une table partitionnéeDetermining boundary values for a partitioned table

La requête suivante renvoie les valeurs limites pour chaque partition de la table FactResellerSales .The following query returns the boundary values for each partition in the FactResellerSales table.

SELECT t.name AS TableName, i.name AS IndexName, p.partition_number,
    p.partition_id, i.data_space_id, f.function_id, f.type_desc,
    r.boundary_id, r.value AS BoundaryValue
FROM sys.tables AS t
JOIN sys.indexes AS i
    ON t.object_id = i.object_id
JOIN sys.partitions AS p
    ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN  sys.partition_schemes AS s
    ON i.data_space_id = s.data_space_id
JOIN sys.partition_functions AS f
    ON s.function_id = f.function_id
LEFT JOIN sys.partition_range_values AS r
    ON f.function_id = r.function_id and r.boundary_id = p.partition_number
WHERE t.name = 'FactResellerSales' AND i.type <= 1
ORDER BY p.partition_number;

C.C. Déterminer la colonne de partition pour une table partitionnéeDetermining the partition column for a partitioned table

La requête suivante renvoie le nom de la colonne de partitionnement pour une table.The following query returns the name of the partitioning column for table. FactResellerSales.FactResellerSales.

SELECT t.object_id AS Object_ID, t.name AS TableName,
    ic.column_id as PartitioningColumnID, c.name AS PartitioningColumnName
FROM sys.tables AS t
JOIN sys.indexes AS i
    ON t.object_id = i.object_id
JOIN sys.columns AS c
    ON t.object_id = c.object_id
JOIN sys.partition_schemes AS ps
    ON ps.data_space_id = i.data_space_id
JOIN sys.index_columns AS ic
    ON ic.object_id = i.object_id
    AND ic.index_id = i.index_id AND ic.partition_ordinal > 0
WHERE t.name = 'FactResellerSales'
AND i.type <= 1
AND c.column_id = ic.column_id;

D.D. Fusionner deux partitionsMerging two partitions

L’exemple suivant fusionne deux partitions sur une table.The following example merges two partitions on a table.

La table Customer a la définition suivante :The Customer table has the following definition:

CREATE TABLE Customer (
    id int NOT NULL,
    lastName varchar(20),
    orderCount int,
    orderDate date)
WITH
    ( DISTRIBUTION = HASH(id),
    PARTITION ( orderCount RANGE LEFT
    FOR VALUES (1, 5, 10, 25, 50, 100)));

La commande suivante combine les limites de 10 et 25 partitions.The following command combines the 10 and 25 partition boundaries.

ALTER TABLE Customer MERGE RANGE (10);

La nouvelle DDL pour la table est la suivante :The new DDL for the table is:

CREATE TABLE Customer (
    id int NOT NULL,
    lastName varchar(20),
    orderCount int,
    orderDate date)
WITH
    ( DISTRIBUTION = HASH(id),
    PARTITION ( orderCount RANGE LEFT
    FOR VALUES (1, 5, 25, 50, 100)));

E.E. Fractionner une partitionSplitting a partition

L’exemple suivant fractionne une partition sur une table.The following example splits a partition on a table.

La table Customer a la DDL suivante :The Customer table has the following DDL:

DROP TABLE Customer;

CREATE TABLE Customer (
    id int NOT NULL,
    lastName varchar(20),
    orderCount int,
    orderDate date)
WITH
    ( DISTRIBUTION = HASH(id),
    PARTITION ( orderCount RANGE LEFT
    FOR VALUES (1, 5, 10, 25, 50, 100 )));

La commande suivante crée une partition liée par la valeur 75, entre 50 et 100.The following command creates a new partition bound by the value 75, between 50 and 100.

ALTER TABLE Customer SPLIT RANGE (75);

La nouvelle DDL pour la table est la suivante :The new DDL for the table is:

CREATE TABLE Customer (
   id int NOT NULL,
   lastName varchar(20),
   orderCount int,
   orderDate date)
   WITH DISTRIBUTION = HASH(id),
   PARTITION ( orderCount (RANGE LEFT
      FOR VALUES (1, 5, 10, 25, 50, 75, 100 )));

F.F. Utiliser SWITCH pour déplacer une partition vers une table d’historiqueUsing SWITCH to move a partition to a history table

L’exemple suivant déplace les données dans une partition de la table Orders vers une partition dans la table OrdersHistory.The following example moves the data in a partition of the Orders table to a partition in the OrdersHistory table.

La table Orders a la DDL suivante :The Orders table has the following DDL:

CREATE TABLE Orders (
    id INT,
    city VARCHAR (25),
    lastUpdateDate DATE,
    orderDate DATE )
WITH
    (DISTRIBUTION = HASH ( id ),
    PARTITION ( orderDate RANGE RIGHT
    FOR VALUES ('2004-01-01', '2005-01-01', '2006-01-01', '2007-01-01' )));

Dans cet exemple, la table Orders a les partitions suivantes.In this example, the Orders table has the following partitions. Chaque partition contient des données.Each partition contains data.

PartitionPartition Contient des données ?Has data? Plage de limiteBoundary range
11 OuiYes OrderDate < '2004-01-01'OrderDate < '2004-01-01'
22 OuiYes '2004-01-01' <= OrderDate < '2005-01-01''2004-01-01' <= OrderDate < '2005-01-01'
33 OuiYes '2005-01-01' <= OrderDate< '2006-01-01''2005-01-01' <= OrderDate< '2006-01-01'
44 OuiYes '2006-01-01'<= OrderDate < '2007-01-01''2006-01-01'<= OrderDate < '2007-01-01'
55 OuiYes '2007-01-01' <= OrderDate'2007-01-01' <= OrderDate
     
  • Partition 1 (a des données) : OrderDate < '2004-01-01'Partition 1 (has data): OrderDate < '2004-01-01'
  • Partition 2 (a des données) : '2004-01-01' <= OrderDate < '2005-01-01'Partition 2 (has data): '2004-01-01' <= OrderDate < '2005-01-01'
  • Partition 3 (a des données) : '2005-01-01' <= OrderDate< '2006-01-01'Partition 3 (has data): '2005-01-01' <= OrderDate< '2006-01-01'
  • Partition 4 (a des données) : '2006-01-01'<= OrderDate < '2007-01-01'Partition 4 (has data): '2006-01-01'<= OrderDate < '2007-01-01'
  • Partition 5 (a des données) : '2007-01-01' <= OrderDatePartition 5 (has data): '2007-01-01' <= OrderDate

La table OrdersHistory a la DDL suivante, qui a des colonnes et des noms de colonnes identiques à ceux de la table Orders.The OrdersHistory table has the following DDL, which has identical columns and column names as the Orders table. Toute deux sont distribuées par hachage sur la colonne id.Both are hash-distributed on the id column.

CREATE TABLE OrdersHistory (
   id INT,
   city VARCHAR (25),
   lastUpdateDate DATE,
   orderDate DATE )
WITH
    (DISTRIBUTION = HASH ( id ),
    PARTITION ( orderDate RANGE RIGHT
    FOR VALUES ( '2004-01-01' )));

Bien que les colonnes et les noms de colonnes doivent être identiques, les limites de partition ne doivent pas obligatoirement être les mêmes.Although the columns and column names must be the same, the partition boundaries don't need to be the same. Dans cet exemple, la table OrdersHistory a les deux partitions suivantes, toutes deux vides :In this example, the OrdersHistory table has the following two partitions and both partitions are empty:

  • Partition 1 (aucune donnée) : OrderDate < '2004-01-01'Partition 1 (no data): OrderDate < '2004-01-01'
  • Partition 2 (vide) : '2004-01-01' <= OrderDatePartition 2 (empty): '2004-01-01' <= OrderDate

Pour les deux tables précédentes, la commande suivante déplace toutes les lignes avec OrderDate < '2004-01-01' de la table Orders vers la table OrdersHistory.For the previous two tables, the following command moves all rows with OrderDate < '2004-01-01' from the Orders table to the OrdersHistory table.

ALTER TABLE Orders SWITCH PARTITION 1 TO OrdersHistory PARTITION 1;

En conséquence, la première partition dans Orders est vide et la première partition dans OrdersHistory contient des données.As a result, the first partition in Orders is empty and the first partition in OrdersHistory contains data. Les tables apparaissent maintenant comme suit :The tables now appear as follows:

Table OrdersOrders table

  • Partition 1 (vide) : OrderDate < '2004-01-01'Partition 1 (empty): OrderDate < '2004-01-01'
  • Partition 2 (a des données) : '2004-01-01' <= OrderDate < '2005-01-01'Partition 2 (has data): '2004-01-01' <= OrderDate < '2005-01-01'
  • Partition 3 (a des données) : '2005-01-01' <= OrderDate< '2006-01-01'Partition 3 (has data): '2005-01-01' <= OrderDate< '2006-01-01'
  • Partition 4 (a des données) : '2006-01-01'<= OrderDate < '2007-01-01'Partition 4 (has data): '2006-01-01'<= OrderDate < '2007-01-01'
  • Partition 5 (a des données) : '2007-01-01' <= OrderDatePartition 5 (has data): '2007-01-01' <= OrderDate

Table OrdersHistoryOrdersHistory table

  • Partition 1 (a des données) : OrderDate < '2004-01-01'Partition 1 (has data): OrderDate < '2004-01-01'
  • Partition 2 (vide) : '2004-01-01' <= OrderDatePartition 2 (empty): '2004-01-01' <= OrderDate

Pour nettoyer la table Orders, vous pouvez supprimer la partition vide en fusionnant les partitions 1 et 2 comme suit :To clean up the Orders table, you can remove the empty partition by merging partitions 1 and 2 as follows:

ALTER TABLE Orders MERGE RANGE ('2004-01-01');

Après la fusion, la table Orders a les partitions suivantes :After the merge, the Orders table has the following partitions:

Table OrdersOrders table

  • Partition 1 (a des données) : OrderDate < '2005-01-01'Partition 1 (has data): OrderDate < '2005-01-01'
  • Partition 2 (a des données) : '2005-01-01' <= OrderDate< '2006-01-01'Partition 2 (has data): '2005-01-01' <= OrderDate< '2006-01-01'
  • Partition 3 (a des données) : '2006-01-01'<= OrderDate < '2007-01-01'Partition 3 (has data): '2006-01-01'<= OrderDate < '2007-01-01'
  • Partition 4 (a des données) : '2007-01-01' <= OrderDatePartition 4 (has data): '2007-01-01' <= OrderDate

Supposez qu’une autre année s’écoule et que vous êtes prêt à archiver l’année 2005.Suppose another year passes and you're ready to archive the year 2005. Vous pouvez allouer une partition vide pour l’année 2005 dans la table OrdersHistory en fractionnant la partition vide comme suit :You can allocate an empty partition for the year 2005 in the OrdersHistory table by splitting the empty partition as follows:

ALTER TABLE OrdersHistory SPLIT RANGE ('2005-01-01');

Après le fractionnement, la table OrdersHistory a les partitions suivantes :After the split, the OrdersHistory table has the following partitions:

Table OrdersHistoryOrdersHistory table

  • Partition 1 (a des données) : OrderDate < '2004-01-01'Partition 1 (has data): OrderDate < '2004-01-01'
  • Partition 2 (vide) : '2004-01-01' < '2005-01-01'Partition 2 (empty): '2004-01-01' < '2005-01-01'
  • Partition 3 (vide) : '2005-01-01' <= OrderDatePartition 3 (empty): '2005-01-01' <= OrderDate

Voir aussiSee Also