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

ОБЛАСТЬ ПРИМЕНЕНИЯ ЭТОЙ СТАТЬИ: даSQL Server (начиная с 2008)даБаза данных SQL AzureдаХранилище данных SQL AzureдаParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Изменяет определение таблицы путем изменения, добавления или удаления столбцов и ограничений, переназначения и перестраивания секций, а также отключения или включения ограничений и триггеров.Modifies a table definition by altering, adding, or dropping columns and constraints, reassigning and rebuilding partitions, or disabling or enabling constraints and triggers.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

-- Syntax for SQL Server and Azure SQL Database  

ALTER TABLE [ database_name . [ schema_name ] . | schema_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 } )   
}  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  

ALTER TABLE [ database_name . [schema_name ] . | schema_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 ]  
}  
[;]  

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

АргументыArguments

database_namedatabase_name
Имя базы данных, в которой создана таблица.Is the name of the database in which the table was created.

schema_nameschema_name
Имя схемы, которой принадлежит таблица.Is the name of the schema to which the table belongs.

имя_таблицыtable_name
Имя таблицы, подлежащей изменению.Is the name of the table to be altered. Если таблицы нет в текущей базе данных или она не содержится в схеме, которой владеет текущий пользователь, то и база данных, и схема должны быть явно указаны.If the table is not in the current database or is not contained by the schema owned by the current user, the database and schema must be explicitly specified.

ALTER COLUMNALTER COLUMN
Указывает, что именованный столбец подлежит изменению.Specifies that the named column is to be changed or altered.

Нельзя изменять следующие столбцы.The modified column cannot be any one of the following:

  • Столбец с timestamp тип данных.A column with a timestamp data type.

  • Свойство ROWGUIDCOL для таблицы.The ROWGUIDCOL for the table.

  • Вычисляемый столбец или используемый в вычисляемом столбце.A computed column or used in a computed column.

  • Используется в статистике, сформированной инструкцией CREATE STATISTICS, если столбец не принадлежит varchar, nvarchar, или varbinary тип данных, тип данных не изменяется, и новый размер больше старого или равно или при изменении столбца из не null на null.Used in statistics generated by the CREATE STATISTICS statement unless the column is a varchar, nvarchar, or varbinary data type, the data type is not changed, and the new size is equal to or greater than the old size, or if the column is changed from not null to null. Во-первых, удалите статистику, используя инструкцию DROP STATISTICS.First, remove the statistics using the DROP STATISTICS statement. Статистика, автоматически сформированная оптимизатором запросов, автоматически удаляется инструкцией ALTER COLUMN.Statistics that are automatically generated by the query optimizer are automatically dropped by ALTER COLUMN.

  • Используется в ограничении PRIMARY KEY или [FOREIGN KEY] REFERENCES.Used in a PRIMARY KEY or [FOREIGN KEY] REFERENCES constraint.

  • Используется в ограничениях CHECK или UNIQUE.Used in a CHECK or UNIQUE constraint. Однако допустимо изменение длины столбца изменяемой длины, используемого в ограничении CHECK или UNIQUE.However, changing the length of a variable-length column used in a CHECK or UNIQUE constraint is allowed.

  • Связано с определением по умолчанию.Associated with a default definition. Однако если тип данных не изменен, то длина, точность или масштаб столбца могут быть изменены.However, the length, precision, or scale of a column can be changed if the data type is not changed.

Тип данных текст, ntext и изображения столбцов можно изменить следующими способами:The data type of text, ntext and image columns can be changed only in the following ways:

  • текст для varchar(max), nvarchar(max), или xmltext to varchar(max), nvarchar(max), or xml

  • ntext для varchar(max), nvarchar(max), или xmlntext to varchar(max), nvarchar(max), or xml

  • изображение для varbinary(max)image to varbinary(max)

Некоторые изменения типов данных могут повлечь за собой изменения в данных.Some data type changes may cause a change in the data. Например, изменение nchar или nvarchar столбец char или varchar может вызвать преобразование символов национальных алфавитов.For example, changing an nchar or nvarchar column to char or varchar may cause the conversion of extended characters. Дополнительные сведения см. в разделе Функции CAST и CONVERT (Transact-SQL).For more information, see CAST and CONVERT (Transact-SQL). Снижение точности или масштаба столбца может привести к усечению данных.Reducing the precision or scale of a column may cause data truncation.

Примечание

Нельзя изменять тип данных столбца секционированной таблицы.The data type of a column of a partitioned table cannot be changed.

Тип данных столбцов, включенных в индекс не может изменяться, если столбец не принадлежит varchar, nvarchar, или varbinary тип данных, и новый размер больше или равно более старый размер.The data type of columns included in an index cannot 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.

Не удается изменить столбец, включенный в ограничение первичного ключа с NOT NULL для NULL.A column included in a primary key constraint, cannot be changed from NOT NULL to NULL.

Если выполняется изменение столбца, зашифрованные с помощью ENCRYPTED WITH, можно изменить тип данных в совместимый тип данных (такие как INT в BIGINT), но не может изменить любые параметры шифрования.If the column being modified is encrypted using ENCRYPTED WITH, you can change the datatype to a compatible datatype (such as INT to BIGINT) but you cannot change any encryption settings.

column_namecolumn_name
Имя столбца, который требуется изменить, добавить или удалить.Is the name of the column to be altered, added, or dropped. column_name не может превышать 128 символов.column_name can be a maximum of 128 characters. Для новых столбцов column_name может быть опущен для столбцов, созданных с помощью timestamp тип данных.For new columns, column_name can be omitted for columns created with a timestamp data type. Имя timestamp используется, если column_name указан для timestamp столбец типа данных.The name timestamp is used if no column_name is specified for a timestamp data type column.

[ type_schema_name. ] type_name[ type_schema_name. ] type_name
Новый тип данных для изменяемого столбца либо тип данных для добавляемого столбца.Is the new data type for the altered column, or the data type for the added column. Функция TYPE_NAME нельзя указывать для существующих столбцов секционированных таблиц.type_name cannot be specified for existing columns of partitioned tables. Функция TYPE_NAME может принимать любое из следующих действий:type_name can be any one of the following:

  • Системным типом данных SQL ServerSQL Server.A SQL ServerSQL Server system data type.

  • Псевдонимом типа данных, основанным на системном типе данных SQL ServerSQL Server.An alias data type based on a SQL ServerSQL Server system data type. Прежде чем псевдонимы типов данных можно будет использовать в определении таблицы, их нужно создать с помощью инструкции CREATE TYPE.Alias data types are created with the CREATE TYPE statement before they can be used in a table definition.

  • Определяемый пользователем тип .NET Framework.NET Framework и схема, к которой он принадлежит.A .NET Framework.NET Framework user-defined type, and the schema to which it belongs. Чтобы определяемые пользователем типы .NET Framework.NET Framework можно было использовать в определении столбца, их сначала нужно создать с помощью инструкции CREATE TYPE. .NET Framework.NET Framework user-defined types are created with the CREATE TYPE statement before they can be used in a table definition.

Ниже приведены критерии для type_name изменяемого столбца:The following are criteria for type_name of an altered column:

  • Предыдущие типы данных должны быть неявно преобразуемыми в новый тип данных.The previous data type must be implicitly convertible to the new data type.
  • Функция TYPE_NAME не может быть timestamp.type_name cannot be timestamp.
  • По умолчанию для аргумента ANSI_NULL инструкции ALTER COLUMN всегда установлено значение ON; если не указано иное, столбец может содержать значения NULL.ANSI_NULL defaults are always on for ALTER COLUMN; if not specified, the column is nullable.
  • Аргумент заполнения ANSI_PADDING для инструкции ALTER COLUMN всегда принимает значение ON.ANSI_PADDING padding is always ON for ALTER COLUMN.
  • Если изменяемый столбец является столбцом идентификаторов new_data_type должен быть типом данных, которая поддерживает свойство identity.If the modified column is an identity column, new_data_type must be a data type that supports the identity property.
  • Текущая установка для аргумента SET ARITHABORT пропускается.The current setting for SET ARITHABORT is ignored. Инструкция ALTER TABLE функционирует аналогично случаю, когда для аргумента ARITHABORT установлено значение ON.ALTER TABLE operates as if ARITHABORT is set to ON.

Примечание

Если предложение COLLATE не указывается, то изменение типа данных столбца вызовет изменение параметров сортировки на параметры сортировки базы данных по умолчанию.If the COLLATE clause is not specified, changing the data type of a column will cause a collation change to the default collation of the database.

precisionprecision
Точность указанного типа данных.Is the precision for the specified data type. Дополнительные сведения о допустимых значениях точности см. в разделе точность, масштаб и длина ( Transact-SQL ) .For more information about valid precision values, see Precision, Scale, and Length (Transact-SQL).

масштабscale
Масштаб указанного типа данных.Is the scale for the specified data type. Дополнительные сведения о допустимых значениях масштаба см. в разделе точность, масштаб и длина ( Transact-SQL ) .For more information about valid scale values, see Precision, Scale, and Length (Transact-SQL).

maxmax
Применяется только к varchar, nvarchar, и varbinary типы данных для хранения 2 ^ 31-1 байт символов, двоичных данных и данных Юникода.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
Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Применяется только к xml тип данных для связывания схемы XML с типом.Applies only to the xml data type for associating an XML schema with the type. Перед вводом xml столбца к коллекции схемы коллекции схем сначала должна быть создана в базе данных с помощью CREATE XML SCHEMA COLLECTION.Before typing an xml column to a schema collection, the schema collection must first be created in the database by using CREATE XML SCHEMA COLLECTION.

COLLATE < имя_параметров_сортировки > указывает новые параметры сортировки для изменяемого столбца.COLLATE < collation_name > Specifies the new collation for the altered column. Если не указано, столбцу назначаются параметры сортировки, принятые в базе данных по умолчанию.If not specified, the column is assigned the default collation of the database. Именем параметров сортировки может быть либо имя параметров сортировки Windows, либо имя параметров сортировки SQL.Collation name can be either a Windows collation name or a SQL collation name. Список и Дополнительные сведения см. в разделе имя параметров сортировки Windows ( Transact-SQL ) и SQL Server Collation Name ( Transact-SQL ) .For a list and more information, see Windows Collation Name (Transact-SQL) and SQL Server Collation Name (Transact-SQL).

Предложение COLLATE можно использовать для изменения параметров сортировки только для столбцов char, varchar, nchar, и nvarchar типов данных.The COLLATE clause can be used to change the collations only of columns of the char, varchar, nchar, and nvarchar data types. Чтобы изменить параметры сортировки столбца пользовательского псевдонима типа данных, необходимо выполнить отдельные инструкции ALTER TABLE, чтобы изменить столбец на системный тип данных SQL ServerSQL Server, изменить параметры сортировки, а затем снова перевести столбец в псевдоним типа данных.To change the collation of a user-defined alias data type column, you must execute separate ALTER TABLE statements to change the column to a SQL ServerSQL Server system data type and change its collation, and then change the column back to an alias data type.

Инструкция ALTER COLUMN не может изменить параметры сортировки, если выполняется одно или несколько из следующих условий:ALTER COLUMN cannot have a collation change if one or more of the following conditions exist:

  • Если на изменяемый столбец ссылается ограничение CHECK, ограничение FOREIGN KEY или вычисляемые столбцы.If a CHECK constraint, FOREIGN KEY constraint, or computed columns reference the column changed.
  • Если на базе столбца создан какой-нибудь индекс, статистика или полнотекстовый индекс.If any index, statistics, or full-text index are created on the column. Статистика, автоматически созданная на базе изменяемого столбца, удаляется, если изменяются параметры сортировки столбца.Statistics created automatically on the column changed are dropped if the column collation is changed.
  • Если связанное со схемой представление или функция ссылаются на столбец.If a schema-bound view or function references the column.

Дополнительные сведения см. в разделе COLLATE (Transact-SQL).For more information, see COLLATE (Transact-SQL).

NULL | NOT NULLNULL | NOT NULL
Указывает, может ли столбец принимать значения NULL.Specifies whether the column can accept null values. Столбцы, не допускающие значения NULL, могут быть добавлены инструкцией ALTER TABLE только в том случае, если для них указаны значения по умолчанию или если таблица пуста.Columns that do not allow null values can be added with ALTER TABLE only if they have a default specified or if the table is empty. Ограничение NOT NULL может быть указано для вычисляемых столбцов только в случае, если одновременно указан параметр PERSISTED.NOT NULL can be specified for computed columns only if PERSISTED is also specified. Если новый столбец допускает значения NULL, а значение по умолчанию не задано, то новый столбец содержит значение NULL для каждой строки в таблице.If the new column allows null values and no default is specified, the new column contains a null value for each row in the table. Если новый столбец допускает значение NULL, а определение по умолчанию добавляется с новым столбцом, то инструкция WITH VALUES может использоваться для хранения значений по умолчанию в новом столбце для каждой существующей строки в таблице.If the new column allows null values and a default definition is added with the new column, WITH VALUES can be used to store the default value in the new column for each existing row in the table.

Если новый столбец не допускает значение NULL и таблица не пуста, то определение DEFAULT должно быть добавлено с новым столбцом. Новый столбец автоматически загружается со значениями по умолчанию в каждой существующей строке нового столбца.If the new column does not allow null values and the table is not empty, a DEFAULT definition must be added with the new column, and the new column automatically loads with the default value in the new columns in each existing row.

Значение NULL может указываться в инструкции ALTER COLUMN, чтобы принудить столбец NOT NULL допускать значения NULL, за исключением столбцов в ограничениях PRIMARY KEY.NULL can be specified in ALTER COLUMN to force a NOT NULL column to allow null values, except for columns in PRIMARY KEY constraints. Значение NOT NULL может быть указано в инструкции ALTER COLUMN, только если столбец не содержит значения NULL.NOT NULL can be specified in ALTER COLUMN only if the column contains no null values. Значения NULL следует обновить, присвоив некоторые значения, прежде чем разрешить инструкцию ALTER COLUMN NOT NULL, например: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;  

При создании или изменении таблицы инструкцией CREATE TABLE или ALTER TABLE установки базы данных и сеанса изменяются и, возможно, переопределяют разрешение содержать значение NULL для типа данных, используемого в определении столбца.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 is used in a column definition. Рекомендуется всегда явно определять невычисляемые столбцы как NULL или NOT NULL.We recommend that you always explicitly define a column as NULL or NOT NULL for noncomputed columns.

Если добавляется столбец определяемого пользователем типа данных, то рекомендуется определить для этого столбца то же состояние допустимости значений NULL, что и в определяемом пользователем типе данных и задать для него значение по умолчанию.If you add a column with a user-defined data type, we recommend that you define the column with the same nullability as the user-defined data type and specify a default value for the column. Дополнительные сведения см. в разделе CREATE TABLE (Transact-SQL).For more information, see CREATE TABLE (Transact-SQL).

Примечание

Если значение NULL или не указано значение NULL в инструкции ALTER COLUMN new_data_type [(точности [, шкалы ])] также должен быть указан.If NULL or NOT NULL is specified with ALTER COLUMN, new_data_type [(precision [, scale ])] must also be specified. Если тип данных, точность или масштаб не изменялись, укажите текущие значения столбца.If the data type, precision, and scale are not changed, specify the current column values.

[ {ADD | DROP} ROWGUIDCOL ][ {ADD | DROP} ROWGUIDCOL ]
Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Указывает свойство ROWGUIDCOL, добавленное к указанному столбцу или удаленное из него.Specifies the ROWGUIDCOL property is added to or dropped from the specified column. Свойство ROWGUIDCOL указывает, что данный столбец является столбцом идентификатора GUID строки.ROWGUIDCOL indicates that the column is a row GUID column. Только один uniqueidentifier столбца в каждой таблице можно определить как столбец ROWGUIDCOL, и свойство ROWGUIDCOL может присваиваться только uniqueidentifier столбца.Only one uniqueidentifier column per table can be designated as the ROWGUIDCOL column, and the ROWGUIDCOL property can be assigned only to a uniqueidentifier column. Нельзя присваивать свойство ROWGUIDCOL столбцу определяемого пользователем типа данных.ROWGUIDCOL cannot be assigned to a column of a user-defined data type.

Свойство ROWGUIDCOL не обеспечивает уникальности значений, хранимых в столбце, и не формирует автоматически значения для новых строк, вставляемых в таблицу.ROWGUIDCOL does not enforce uniqueness of the values that are stored in the column and does not automatically generate values for new rows that are inserted into the table. Для формирования уникальных значений для каждого столбца можно использовать функцию NEWID в инструкциях INSERT или определить функцию NEWID как значение по умолчанию для столбца.To generate unique values for each column, either use the NEWID function on INSERT statements or specify the NEWID function as the default for the column.

[ {ADD | DROP} PERSISTED ][ {ADD | DROP} PERSISTED ]
Указывает, что свойство PERSISTED добавлено к указанному столбцу или удалено из него.Specifies that the PERSISTED property is added to or dropped from the specified column. Столбец должен быть вычисляемым столбцом, который задается при помощи детерминированных выражений.The column must be a computed column that is defined with a deterministic expression. Для столбцов, указанных как PERSISTED, компонент Компонент Database EngineDatabase Engine физически хранит вычисляемые значения в таблице и обновляет значения при обновлении любого столбца, от которого зависит вычисляемый столбец.For columns specified as PERSISTED, the Компонент Database EngineDatabase 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. Если пометить вычисляемый столбец как PERSISTED, можно создавать индексы по вычисляемым столбцам, которые заданы, являются детерминированными, но не точными выражениями.By marking a computed column as PERSISTED, you can create indexes on computed columns defined on expressions that are deterministic, but not precise. Дополнительные сведения см. в разделе Indexes on Computed Columns.For more information, see Indexes on Computed Columns.

Любой вычисляемый столбец, используемый как столбец секционирования секционированной таблицы, должен быть явно помечен PERSISTED.Any computed column that is used as a partitioning column of a partitioned table must be explicitly marked PERSISTED.

DROP NOT FOR REPLICATIONDROP NOT FOR REPLICATION
Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Указывает, что значения в столбцах идентификаторов увеличиваются при выполнении агентами репликации операций по вставке строк.Specifies that values are incremented in identity columns when replication agents perform insert operations. Это предложение может быть указан только в том случае, если column_name является столбцом идентификаторов.This clause can be specified only if column_name is an identity column.

SPARSESPARSE
Указывает, что столбец является разреженным столбцом.Indicates that the column is a sparse column. Хранилище разреженных столбцов оптимизируется для значений NULL.The storage of sparse columns is optimized for null values. Для разреженных столбцов нельзя указать параметр NOT NULL.Sparse columns cannot be designated as NOT NULL. При преобразовании столбцов из разреженных в неразреженные или из неразреженных в разреженные таблица блокируется на протяжении выполнения команды.Converting a column from sparse to nonsparse or from nonsparse to sparse locks the table for the duration of the command execution. Возможно, потребуется использование предложения REBUILD для освобождения пространства.You may need to use the REBUILD clause to reclaim any space savings. Дополнительные ограничения и Дополнительные сведения о разреженных столбцах см. в разделе Использование разреженных столбцов.For additional restrictions and more information about sparse columns, see Use Sparse Columns.

Добавить СКРЫТЫЙ с (ФУНКЦИЯ = " mask_function ")ADD MASKED WITH ( FUNCTION = ' mask_function ')
Применяется к: SQL Server 2016SQL Server 2016 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Задает маску динамических данных.Specifies a dynamic data mask. mask_function имя функция маскирования с соответствующими параметрами.mask_function is the name of the masking function with the appropriate parameters. Доступны три функции:Three functions are available:

С ПОМОЩЬЮ (ONLINE = ON | OFF) <к изменению столбца >WITH ( ONLINE = ON | OFF) <as applies to altering a column>
Применяется к: SQL Server 2016SQL Server 2016 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Позволяет выполнять многие действия по изменению столбцов с сохранением доступности таблицы.Allows many alter column actions to be performed while the table remains available. По умолчанию — OFF.Default is OFF. В интерактивном режиме могут выполняться изменения столбца, связанные с типом данных, длиной или точностью столбца, допустимостью значений NULL, разреженностью и параметрами сортировки.Alter column can be performed on line for column changes related to data type, column length or precision, nullability, sparseness, and collation.

Изменение столбца в режиме «в сети» позволяет созданной пользователем и автоматической статистике ссылаться на изменяемый столбец во время операции ALTER COLUMN.Online alter column allows user created and auto statistics to reference the altered column for the duration of the ALTER COLUMN operation. Таким образом запросы могут выполняться как обычно.This allows queries to perform as usual. В конце операции автоматическая статистика, которая ссылается на столбец, удаляется, а статистика, созданная пользователем, становится недействительной.At the end of the operation, auto-stats that reference the column are dropped and user-created stats are invalidated. Пользователь должен вручную обновить созданную пользователем статистику после завершения операции.The user must manually update user-generated statistics after the operation is completed. Если столбец является частью выражения фильтра для статистика или индексы не удается выполнить операцию изменения столбца.If the column is part of a filter expression for any statistics or indexes then you cannot perform an alter column operation.

  • Во время выполнения операции изменения столбца в режиме «в сети» все операции, имеющие зависимость от этого столбца (такие как индексирование, представления и т. д.), будут блокироваться или завершаться с соответствующей ошибкой.While the online alter column operation is running, all operations that could take a dependency on the column (index, views, etc.) will block or fail with an appropriate error. Это гарантирует, что при изменении столбца в режиме «в сети» не произойдет сбой из-за зависимостей, возникших во время выполнения операции.This guarantees that online alter column will not fail because of dependencies introduced while the operation was running.

  • Изменение столбца с NOT NULL на NULL не поддерживается, поскольку это операция в режиме «в сети», когда к изменяемому столбцу обращаются по некластеризованным индексам.Altering a column from NOT NULL to NULL is not supported as an online operation when the altered column is references by nonclustered indexes.

  • Изменение в режиме «в сети» не поддерживается, когда на столбец ссылается ограничение CHECK, и операция изменения ограничивает точность столбца (числового или содержащего дату и время).Online alter is not supported when the column is referenced by a check constraint and the alter operation is restricting the precision of the column (numeric or datetime).

  • При изменении столбца в режиме «в сети» не может использоваться параметр WAIT_AT_LOW_PRIORITY.The WAIT_AT_LOW_PRIORITY option cannot be used with online alter column.

  • ALTER COLUMN … ADD/DROP PERSISTEDне поддерживается для сети.ALTER COLUMN … ADD/DROP PERSISTED is not supported for online alter column.

  • ALTER COLUMN … ADD/DROP ROWGUIDCOL/NOT FOR REPLICATIONне затрагивается сети alter столбца.ALTER COLUMN … ADD/DROP ROWGUIDCOL/NOT FOR REPLICATION is not affected by online alter column.

  • Изменение столбца в режиме «в сети» не поддерживает изменение таблицы, в которой включено отслеживание изменений, или которая является издателем репликации слиянием.Online alter column does not support altering a table where change tracking is enabled or that is a publisher of merge replication.

  • Изменение столбца в режиме «в сети» не поддерживает изменение с типов данных CLR или на типы данных CLR.Online alter column does not support altering from or to CLR data types.

  • Изменение столбца в режиме «в сети» не поддерживает изменение на тип данных XML, который имеет коллекцию схем, отличную от текущей коллекции схем.Online alter column does not support altering to an XML data type that has a schema collection different than the current schema collection.

  • Изменение столбца в режиме «в сети» не уменьшает ограничения на то, когда столбец может быть изменен.Online alter column does not reduce the restrictions on when a column can be altered. Ссылки из индекса, статистических данных и т. п. могут привести к сбою изменения.References by index/stats, etc. might cause the alter to fail.

  • Изменение в режиме «в сети» нескольких столбцов одновременно не поддерживается.Online alter column does not support altering more than one column concurrently.

  • Через Интернет столбца не оказывает влияния при использовании темпоральной таблицы с системным управлением версиями.Online alter column has no effect in case of system-versioned temporal table. Столбец ALTER не выполняется в оперативном режиме, независимо от того, какое значение указано для параметра ONLINE.ALTER column is not performed as online regardless of which value was specified for ONLINE option.

Изменение столбца в режиме «в сети» имеет такие же требования, ограничения и функциональные возможности, как и перестроение индекса в режиме «в сети».Online alter column has similar requirements, restrictions, and functionality as online index rebuild. В том числе:This includes:

  • Перестроение индекса в режиме «в сети» не поддерживается, если таблица содержит устаревшие столбцы с типом LOB или FILESTREAM, или если таблица имеет индекс columnstore.Online index rebuild is not supported when the table contains legacy LOB or filestream columns or when the table has a columnstore index. Эти же ограничения действуют при изменении столбца в режиме «в сети».The same limitations apply for online alter column.

  • Для изменения существующего столбца требуется удвоенное выделение пространства — для исходного столбца и для вновь создаваемого скрытого столбца.An existing column being altered requires twice the space allocation; for the original column and for the newly created hidden column.

  • Стратегия блокировки во время операции изменения столбца в режиме «в сети» использует ту же модель блокировки, что и при перестроении индекса в режиме «в сети».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
Указывает, удовлетворяют ли данные в таблице недавно добавленному или повторно включенному ограничению FOREIGN KEY или CHECK.Specifies whether the data in the table is or is not validated against a newly added or re-enabled FOREIGN KEY or CHECK constraint. Если не указано иное, для новых ограничений предполагается использовать WITH CHECK, а для повторно включенных ограничений — WITH NOCHECK.If not specified, WITH CHECK is assumed for new constraints, and WITH NOCHECK is assumed for re-enabled constraints.

Если проверка новых ограничений CHECK или FOREIGN KEY относительно существующих данных не нужна, используйте WITH NOCHECK.If you do not want to verify new CHECK or FOREIGN KEY constraints against existing data, use WITH NOCHECK. За исключением редких случаев делать этого не рекомендуется.We do not recommend doing this, except in rare cases. Новое ограничение будет проверяться во всех дальнейших обновлениях данных.The new constraint will be evaluated in all later data updates. Любые нарушения ограничений, подавляемые WITH NOCHECK во время добавления ограничения, могут вызвать сбой будущих обновлений, если они обновляют строки данными, не соответствующими ограничениям.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 does not comply with the constraint.

Оптимизатор запросов не рассматривает ограничения, которые определены WITH NOCHECK.The query optimizer does not consider constraints that are defined WITH NOCHECK. Такие ограничения не учитываются до тех пор, пока они не будут повторно включены инструкцией 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.

ADDADD
Указывает, что добавлены определения столбцов, определений вычисляемого столбца или ограничений таблицы, или столбцы, которые система будет использовать для системы управления версиями.Specifies that one or more column definitions, computed column definitions, or table constraints are added, or the columns that the system will use for system versioning.

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 )
Применяется к: SQL Server 2017SQL Server 2017 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2017SQL Server 2017 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Задает имена столбцов, система будет использовать для записи период, в течение которого запись остается действительным.Specifies the names of the columns that the system will use to record the period for which a record is valid. Можно указать существующие столбцы или создавать новые столбцы как часть аргумента ADD PERIOD FOR SYSTEM_TIME.You can specify existing columns or create new columns as part of the ADD PERIOD FOR SYSTEM_TIME argument. Столбцы должны иметь тип данных datetime2 и должен быть определен как NOT NULL.The columns must have the datatype of datetime2 and must be defined as NOT NULL. Если столбец периода определяется как значение NULL, возникает ошибка.If a period column is defined as NULL, an error will be thrown. Можно определить column_constraint ( Transact-SQL ) и/или задание значений по умолчанию для столбцов столбцов system_start_time и system_end_time.You can define a column_constraint (Transact-SQL) and/or Specify Default Values for Columns for the system_start_time and system_end_time columns. См. в примере A в системы управления версиями ниже демонстрируется использование значений по умолчанию для столбца system_end_time примерах.See Example A in the System Versioning examples below demonstrating the use of a default value for the system_end_time column.

Этот аргумент используется в сочетании с аргументом для параметра SYSTEM_VERSIONING значение для включения системы управления версиями в существующую таблицу.Use this argument in conjunction with the SET SYSTEM_VERSIONING argument to enable system versioning on an existing table. Дополнительные сведения см. в разделе временных таблицах и Приступая к работе с Темпоральными таблицами в базе данных SQL Azure.For more information, see Temporal Tables and Getting Started with Temporal Tables in Azure SQL Database.

По состоянию на SQL Server 2017SQL Server 2017, пользователи смогут пометить один или оба столбца периода HIDDEN флаг неявно скрыть эти столбцы таким образом, что **ВЫБЕРИТЕ * FROM **<таблицы > не возвращает значения для этих столбцов.As of SQL Server 2017SQL Server 2017, users will be able to mark one or both period columns with HIDDEN flag to implicitly hide these columns such that *SELECT * FROM***<table> does not return a value for those columns. По умолчанию столбцы period не скрыты.By default, period columns are not hidden. Для использования, скрытые столбцы должны быть явно включены во всех запросах, которые ссылаются непосредственно на временная таблица.In order to be used, hidden columns must be explicitly included in all queries that directly reference the temporal table.

DROPDROP
Указывает, что удален один или несколько определений столбцов, определения вычисляемого столбца или ограничений таблицы, или удалить спецификацию для столбцов, система будет использовать для системы управления версиями.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 will use for system versioning.

ОГРАНИЧЕНИЕ constraint_nameCONSTRAINT constraint_name
Указывает, что constraint_name удаляется из таблицы.Specifies that constraint_name is removed from the table. Может быть указано несколько ограничений.Multiple constraints can be listed.

Определяемые пользователем или предоставляемое системой имя ограничения можно определить с помощью запроса к sys.check_constraint, sys.default_constraints, sys.key_constraints, и sys.foreign_keys представления каталога.The user-defined or system-supplied name of the constraint can be determined by querying the sys.check_constraint, sys.default_constraints, sys.key_constraints, and sys.foreign_keys catalog views.

Невозможно удалить ограничение PRIMARY KEY, если в таблице существует XML-индекс.A PRIMARY KEY constraint cannot be dropped if an XML index exists on the table.

COLUMN column_nameCOLUMN column_name
Указывает, что constraint_name или column_name удаляется из таблицы.Specifies that constraint_name or column_name is removed from the table. Может быть указано несколько столбцов.Multiple columns can be listed.

Невозможно удалить столбец, если он:A column cannot be dropped when it is:

  • используется в индексе;Used in an index.

  • используется в ограничениях CHECK, FOREIGN KEY, UNIQUE или PRIMARY KEY;Used in a CHECK, FOREIGN KEY, UNIQUE, or PRIMARY KEY constraint.

  • связан со значением по умолчанию, определенным ключевым словом DEFAULT, или привязан к объекту «значение по умолчанию»;Associated with a default that is defined with the DEFAULT keyword, or bound to a default object.

  • привязан к правилу.Bound to a rule.

Примечание

При удалении столбца место на диске не освобождается.Dropping a column does not reclaim the disk space of the column. В том случае, если размер строк таблицы приближается к пределу или превышает его, возможен возврат места, занятого на диске удаленным столбцом.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. Возврат пространства осуществляется путем создания кластеризованного индекса в таблице или перестроения существующего кластеризованного индекса с помощью ALTER INDEX.Reclaim space by creating a clustered index on the table or rebuilding an existing clustered index by using ALTER INDEX. Сведения о последствиях удаления типов данных LOB разделе запись в блоге CSS.For information about the impact of dropping LOB data types, see this CSS blog entry.

PERIOD FOR SYSTEM_TIMEPERIOD FOR SYSTEM_TIME
Применяется к: SQL Server 2016SQL Server 2016 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Удаляет спецификацию для столбцов, система будет использовать для системы управления версиями.Drops the specification for the columns that the system will use for system versioning.

С <drop_clustered_constraint_option >WITH <drop_clustered_constraint_option>
Указывает, что установлен один или несколько параметров удаления кластеризованного ограничения.Specifies that one or more drop clustered constraint options are set.

MAXDOP = max_degree_of_parallelismMAXDOP = max_degree_of_parallelism
Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Переопределяет максимальная степень параллелизма параметр конфигурации только во время обработки.Overrides the max degree of parallelism configuration option only for the duration of the operation. Дополнительные сведения см. в разделе Настройка параметра конфигурации сервера max degree of parallelism.For more information, see Configure the max degree of parallelism Server Configuration Option.

Используйте параметр MAXDOP для ограничения числа процессоров, применяемых при выполнении параллельных планов.Use the MAXDOP option to limit the number of processors used in parallel plan execution. Максимальное число процессоров — 64.The maximum is 64 processors.

max_degree_of_parallelism может принимать одно из следующих значений:max_degree_of_parallelism can be one of the following values:

11
Подавляет формирование параллельных планов.Suppresses parallel plan generation.

>1>1
Ограничивает указанным значением максимальное число процессоров, используемых для параллельных операций с индексами.Restricts the maximum number of processors used in a parallel index operation to the specified number.

0 (по умолчанию)0 (default)
В зависимости от текущей рабочей нагрузки системы использует реальное или меньшее число процессоров.Uses the actual number of processors or fewer based on the current system workload.

Дополнительные сведения см. в статье Настройка параллельных операций с индексами.For more information, see Configure Parallel Index Operations.

Примечание

Параллельные операции с индексами доступны не во всех выпусках SQL ServerSQL Server.Parallel index operations are not available in every edition of SQL ServerSQL Server. Дополнительные сведения см. в разделе выпуски и поддерживаемые функции для SQL Server 2016.For more information, see Editions and Supported Features for SQL Server 2016.

ONLINE = {ON | OFF } <применяемое к drop_clustered_constraint_option >ONLINE = { ON | OFF } <as applies to drop_clustered_constraint_option>
Определяет, будут ли базовые таблицы и связанные индексы доступны для запросов и изменения данных во время операций с индексами.Specifies whether underlying tables and associated indexes are available for queries and data modification during the index operation. Значение по умолчанию — OFF.The default is OFF. REBUILD может выполняться как операция в режиме ONLINE.REBUILD can be performed as an ONLINE operation.

ONON
Долгосрочные блокировки таблицы не поддерживаются во время операций с индексами.Long-term table locks are not held for the duration of the index operation. Во время главной фазы операций с индексами только блокировка с намерением совмещаемого доступа (IS) удерживается в исходной таблице.During the main phase of the index operation, only an Intent Share (IS) lock is held on the source table. Это обеспечивает продолжение выполнения запросов или обновлений для базовых таблиц и индексов.This enables queries or updates to the underlying table and indexes to continue. В начале операции совмещаемая блокировка (S) исходного объекта поддерживается в течение очень короткого времени.At the start of the operation, a Shared (S) lock is held on the source object for a very short time. Если создается некластеризованный индекс, то в завершение операции на короткое время запрашивается совмещаемая блокировка (S) для источника. Блокировка типа SCH-M (изменение схемы) запрашивается, когда кластеризованный индекс создается или удаляется в режиме в сети и когда происходит перестроение кластеризованного или некластеризованного индекса.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; 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 не может принимать значение ON.ONLINE cannot be set to ON when an index is being created on a local temporary table. Допустима только однопотоковая операция перестроения кучи.Only single-threaded heap rebuild operation is allowed.

Для выполнения инструкции DDL для КОММУТАТОР или перестроение индекса в сети, все активные блокирующие транзакции, выполняемые для конкретной таблицы должны быть завершены.To execute the DDL for SWITCH or online index rebuild, all active blocking transactions running on a particular table must be completed. При выполнении, КОММУТАТОР или операция перестроения не позволяет запустить новую транзакцию и может существенно повлиять на производительность рабочей нагрузки и временно задержать доступ к базовой таблице.When executing, the SWITCH or rebuild operation prevents new transaction from starting and might significantly affect the workload throughput and temporarily delay access to the underlying table.

OFFOFF
Блокировки таблиц применяются во время выполнения операций с индексами.Table locks are applied for the duration of the index operation. Блокировку изменения схемы (Sch-M) в таблице получает операция с индексами вне сети, которая создает, перестраивает или удаляет кластеризованный индекс либо перестраивает или удаляет некластеризованный индекс.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. Это предотвращает доступ к базовой таблице всех пользователей во время операции.This prevents all user access to the underlying table for the duration of the operation. Операция с индексами вне сети, создающая некластеризованный индекс, получает совмещаемую блокировку (S) в таблице.An offline index operation that creates a nonclustered index acquires a Shared (S) lock on the table. Это запрещает проводить обновления базовой таблицы, но разрешает проводить операции чтения, например инструкции SELECT.This prevents updates to the underlying table but allows read operations, such as SELECT statements. Многопотоковые операции перестроения кучи разрешены.Multi-threaded heap rebuild operations are allowed.

Дополнительные сведения см. в разделе как Online операциях с индексом.For more information, see How Online Index Operations Work.

Примечание

Операции с индексами в сети доступны не во всех выпусках SQL ServerSQL Server.Online index operations are not available in every edition of SQL ServerSQL Server. Дополнительные сведения см. в разделе выпуски и поддерживаемые функции для SQL Server 2016.For more information, see Editions and Supported Features for SQL Server 2016.

ПЕРЕМЕСТИТЬ в { partition_scheme_name(column_name [1, ... n ] ) | файловой группы | »по умолчанию» }MOVE TO { partition_scheme_name(column_name [ 1, ... n] ) | filegroup | "default" }
Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Указывает местоположение для перемещения строк данных, находящихся в настоящее время на конечном уровне кластеризованного индекса.Specifies a location to move the data rows currently in the leaf level of the clustered index. Таблица перемещается на новое место.The table is moved to the new location. Этот параметр применяется только ограничениям, образующим кластеризованный индекс.This option applies only to constraints that create a clustered index.

Примечание

В этом контексте default не является ключевым словом.In this context, default is not a keyword. Он представляет собой идентификатор файловой группы по умолчанию и должен иметь разделители, например: MOVE TO »по умолчанию» или MOVE TO [по умолчанию].It is an identifier for the default filegroup and must be delimited, as in MOVE TO "default" or MOVE TO [default]. Если »по умолчанию» указан, параметр QUOTED_IDENTIFIER должен иметь значение ON для текущего сеанса.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Это параметр по умолчанию.This is the default setting. Дополнительные сведения см. в разделе SET QUOTED_IDENTIFIER (Transact-SQL).For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

{ CHECK | NOCHECK } CONSTRAINT{ CHECK | NOCHECK } CONSTRAINT
Указывает, что constraint_name включен или отключен.Specifies that constraint_name is enabled or disabled. Данный параметр может использоваться только с ограничениями FOREIGN KEY и CHECK.This option can only be used with FOREIGN KEY and CHECK constraints. Если указан параметр NOCHECK, то ограничение отключено и будущие вставки или обновления столбца не проверяются относительно условий ограничений.When NOCHECK is specified, the constraint is disabled and future inserts or updates to the column are not validated against the constraint conditions. Невозможно отключить ограничения DEFAULT, PRIMARY KEY и UNIQUE.DEFAULT, PRIMARY KEY, and UNIQUE constraints cannot be disabled.

ALLALL
Указывает, что все ограничения отключаются при помощи параметра NOCHECK или включаются при помощи параметра CHECK.Specifies that all constraints are either disabled with the NOCHECK option or enabled with the CHECK option.

{ ENABLE | DISABLE } TRIGGER{ ENABLE | DISABLE } TRIGGER
Указывает, что имя_триггера включен или отключен.Specifies that trigger_name is enabled or disabled. Отключенный триггер остается определенным для таблицы; однако при выполнении инструкций INSERT, UPDATE или DELETE относительно таблицы действия в триггере не выполняются до тех пор, пока он не будет включен повторно.When a trigger is disabled it is still defined for the table; however, when INSERT, UPDATE, or DELETE statements are executed against the table, the actions in the trigger are not performed until the trigger is re-enabled.

ALLALL
Указывает, что все триггеры в таблице включены или отключены.Specifies that all triggers in the table are enabled or disabled.

trigger_nametrigger_name
Указывает имя триггера, подлежащего включению или отключению.Specifies the name of the trigger to disable or enable.

{ ENABLE | DISABLE } CHANGE_TRACKING{ ENABLE | DISABLE } CHANGE_TRACKING
Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Указывает, разрешено или запрещено отслеживание изменений для этой таблицы.Specifies whether change tracking is enabled disabled for the table. По умолчанию отслеживание изменений запрещено.By default, change tracking is disabled.

Этот параметр доступен только в том случае, если отслеживание изменений разрешено для базы данных.This option is available only when change tracking is enabled for the database. Дополнительные сведения см. в разделе Параметры ALTER DATABASE SET (Transact-SQL).For more information, see ALTER DATABASE SET Options (Transact-SQL).

Чтобы разрешить отслеживание изменений, в таблице должен содержаться первичный ключ.To enable change tracking, the table must have a primary key.

С ( TRACK_COLUMNS_UPDATED = {ON | OFF } )WITH ( TRACK_COLUMNS_UPDATED = { ON | OFF } )
Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Указывает, производит ли компонент Компонент Database EngineDatabase Engine отслеживание обновлений столбцов.Specifies whether the Компонент Database EngineDatabase Engine tracks which change tracked columns were updated. Значение по умолчанию — OFF.The default value is OFF.

SWITCH [СЕКЦИИ source_partition_number_expression ] TO [ schema_name ***. ] *target_table [СЕКЦИИ target_partition_number_expression ]SWITCH [ PARTITION source_partition_number_expression ] TO [ schema_name. ] target_table [ PARTITION target_partition_number_expression ]
Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Переключает блок данных одним из следующих способов.Switches a block of data in one of the following ways:

  • Переназначает все табличные данные как секцию в уже существующей секционированной таблице.Reassigns all data of a table as a partition to an already-existing partitioned table.

  • Переключает секции из одной секционированной таблицы в другую.Switches a partition from one partitioned table to another.

  • Переназначает все данные одной секции секционированной таблицы в уже существующую несекционированную таблицу.Reassigns all data in one partition of a partitioned table to an existing non-partitioned table.

Если таблицы в секционированной таблице, source_partition_number_expression должен быть указан.If table is a partitioned table, source_partition_number_expression must be specified. Если target_table секционирована, target_partition_number_expression должен быть указан.If target_table is partitioned, target_partition_number_expression must be specified. Если происходит переназначение данных таблицы как секции в уже существующую секционированную таблицу или переключение секции с одной секционированной таблицы на другую, то конечная секция уже должна существовать и быть пустой.If 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.

Если происходит переназначение данных одной секции для формирования одиночной таблицы, то уже должна быть создана пустая целевая таблица.If reassigning one partition's data to form a single table, the target table must already be created and it must be empty. И исходная таблица или секция, и целевая таблица или секция должны располагаться в одной файловой группе.Both the source table or partition, and the target table or partition, must reside in the same filegroup. Соответствующие индексы или секции индексов также должны располагаться в одной и той же файловой группе.The corresponding indexes, or index partitions, must also reside in the same filegroup. К переключаемым секциям применяются многие дополнительные ограничения.Many additional restrictions apply to switching partitions. Таблица и target_table не могут совпадать.table and target_table cannot be the same. target_table может быть составным идентификатором.target_table can be a multi-part identifier.

source_partition_number_expression и target_partition_number_expression являются константными выражениями, которые могут ссылаться на переменные и функции.source_partition_number_expression and target_partition_number_expression are constant expressions that can reference variables and functions. В их число входят переменные определяемого пользователем типа и определяемые пользователем функции.These include user-defined type variables and user-defined functions. Они не могут ссылаться на выражения языка Transact-SQLTransact-SQL.They cannot reference Transact-SQLTransact-SQL expressions.

Секционированная таблица с кластеризованный индекс ведет себя как секционированной куче:A partitioned table with a clustered columstore index behaves like a partitioned heap:

  • Первичный ключ должен включать ключ раздела.The primary key must include the partition key.

  • Уникальный индекс должен включать ключ раздела.A unique index must include the partition key. Обратите внимание, что в том числе в существующий индекс уникального ключа секции можно изменить уникальность.Note that including the partition key to an existing unique index can change the uniqueness.

  • Чтобы переключение секций, все некластеризованные индексы необходимо указать ключ секции.In order to switch partitions, all non-clustered indexes must include the partition key.

Для КОММУТАТОР ограничения при использовании репликации см. в разделе реплицировать секционированных таблиц и индексов.For SWITCH restriction when using replication, see Replicate Partitioned Tables and Indexes.

Некластеризованные индексы columnstore для SQL ServerSQL Server 2016 CTP-версия 1 и для базы данных SQL до версии V12 были в формате только для чтения.Nonclustered columnstore indexes built for SQL ServerSQL Server 2016 CTP1, and for SQL Database before version V12 were in a read-only format. Некластеризованные индексы columnstore необходимо перестроить, чтобы текущий формат (который может быть обновлено) перед выполнением любых операций СЕКЦИОНИРОВАНИЯ.Nonclustered columnstore indexes must be rebuilt to the current format (which is updatable) before any PARTITION operations can be performed.

SET ( FILESTREAM_ON = { partition_scheme_name | filestream_filegroup_name | "default" | "NULL" })SET ( FILESTREAM_ON = { partition_scheme_name | filestream_filegroup_name | "default" | "NULL" })
Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017. |Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.|

Указывает местоположения хранения данных FILESTREAM.Specifies where FILESTREAM data is stored.

Инструкция ALTER TABLE с предложением SET FILESTREAM_ON будет выполнена успешно только в том случае, если в таблице отсутствуют столбцы FILESTREAM.ALTER TABLE with the SET FILESTREAM_ON clause will succeed only if the table has no FILESTREAM columns. Добавить столбцы FILESTREAM можно с помощью второй инструкции ALTER TABLE.The FILESTREAM columns can be added by using a second ALTER TABLE statement.

Если partition_scheme_name указано, правила для CREATE TABLE применения.If partition_scheme_name is specified, the rules for CREATE TABLE apply. Таблица должна быть уже секционирована для строк данных, а схема разделения должна использовать те же функции секционирования и столбцы, что используются в схеме секционирования FILESTREAM.The table should already be partitioned for row data, and its partition scheme must use the same partition function and columns as the FILESTREAM partition scheme.

filestream_filegroup_name указывает имя файловой группы FILESTREAM.filestream_filegroup_name specifies the name of a FILESTREAM filegroup. В файловой группе должен быть один файл, который определен для файловой группы с помощью CREATE DATABASE или инструкции ALTER DATABASE вызывается инструкция, иначе возникает ошибка.The filegroup must have one file that is defined for the filegroup by using a CREATE DATABASE or ALTER DATABASE statement, or an error is raised.

«по умолчанию» указывает файловую группу FILESTREAM с заданным свойством DEFAULT."default" specifies the FILESTREAM filegroup with the DEFAULT property set. При отсутствии файловой группы FILESTREAM возникает ошибка.If there is no FILESTREAM filegroup, an error is raised.

«NULL» указывает, что все ссылки на файловые группы FILESTREAM для таблицы будут удалены."NULL" specifies that all references to FILESTREAM filegroups for the table will be removed. Сначала должны быть удалены все столбцы FILESTREAM.All FILESTREAM columns must be dropped first. Необходимо использовать инструкцию SET FILESTREAM_ONNULL» для удаления всех данных FILESTREAM, связанных с таблицей.You must use SET FILESTREAM_ON="NULL" to delete all FILESTREAM data that is associated with a table.

ЗАДАТЬ ( 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 } ] ) ] } )
Применяется к: SQL Server 2016SQL Server 2016 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Отключение системы управления версиями таблицы либо включает системы управления версиями таблицы.Either disables system versioning of a table or enables system versioning of a table. Чтобы включить систему управления версиями, таблицы, система проверяет соблюдение требования ограничения первичного ключа для системы управления версиями, ограничение на допустимость значений NULL и тип данных.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. Если не используется аргумент HISTORY_TABLE, система создает новую таблицу журнала сопоставления схему текущей таблицы, создание связи между двумя таблицами и позволяет системе записывается история каждой записи в текущей таблице в таблице журнала.If the HISTORY_TABLE argument is not used, the system generates a new history table matching the schema of the current table, creating a link between the two tables and enables the system to record the history of each record in the current table in the history table. Имя этой таблицы журнала будет MSSQL_TemporalHistoryFor<primary_table_object_id>.The name of this history table will be MSSQL_TemporalHistoryFor<primary_table_object_id>. Если аргумент HISTORY_TABLE используется для создания ссылки и использовать существующую таблицу журнала, связь создается между текущей таблицей и указанной таблицы.If the HISTORY_TABLE argument is used to create a link to and use an existing history table, the link is created between the current table and the specified table. При создании ссылки на существующую таблицу журнала вы можете указать необходимость проверки согласованности данных.When creating a link to an existing history table, you can choose to perform a data consistency check. Проверка согласованности данных гарантирует, что существующие записи не перекрываются.This data consistency check ensures that existing records do not overlap. Проверка согласованности данных является проверкой по умолчанию.Performing the data consistency check is the default. Дополнительные сведения см. в разделе Temporal Tables.For more information, see Temporal Tables.

HISTORY_RETENTION_PERIOD = { БЕСКОНЕЧНЫЙ | номер {день | ДНИ | НЕДЕЛЯ | НЕДЕЛИ | МЕСЯЦ | МЕСЯЦЫ | ГОД | ГОДЫ}} применяется к: База данных SQL AzureAzure SQL Database.HISTORY_RETENTION_PERIOD = { INFINITE | number {DAY | DAYS | WEEK | WEEKS | MONTH | MONTHS | YEAR | YEARS} } Applies to: База данных SQL AzureAzure SQL Database.

Указывает конечным или infinte хранения для данных журнала в темпоральной таблице.Specifies finite or infinte retention for historical data in temporal table. Если не указано, подразумевается бесконечного хранения.If omitted, infinite retention is assumed.

ЗАДАТЬ ( LOCK_ESCALATION = {АВТОМАТИЧЕСКИ | ТАБЛИЦА | ОТКЛЮЧИТЬ} )SET ( LOCK_ESCALATION = { AUTO | TABLE | DISABLE } )
Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Указывает разрешенные методы укрупнения блокировки для таблицы.Specifies the allowed methods of lock escalation for a table.

AUTOAUTO
Этот параметр позволяет Компонент SQL Server Database EngineSQL Server Database Engine выбрать гранулярность укрупнения блокировки, подходящую для данной схемы таблицы.This option allows Компонент SQL Server Database EngineSQL Server Database Engine to select the lock escalation granularity that is appropriate for the table schema.

  • В секционированных таблицах допускается укрупнение блокировки до секций.If the table is partitioned, lock escalation will be allowed to partition. После укрупнения блокировки до уровня секции дальнейшее укрупнение до гранулярности TABLE выполняться не будет.After the lock is escalated to the partition level, the lock will not be escalated later to TABLE granularity.

  • Если таблица не секционирована, то блокировка будет укрупняться до гранулярности TABLE.If the table is not partitioned, the lock escalation will be done to the TABLE granularity.

TABLETABLE
Укрупнение блокировки будет выполняться на уровне гранулярности таблицы независимо от того, секционирована таблица или нет.Lock escalation will be done at table-level granularity regardless whether the table is partitioned or not partitioned. Значение по умолчанию равно TABLE.TABLE is the default value.

DISABLEDISABLE
В большинстве случаев предотвращает укрупнение блокировки.Prevents lock escalation in most cases. Блокировки уровня таблицы запрещены не полностью.Table-level locks are not completely disallowed. Например, при сканировании таблицы, которая не имеет кластеризованного индекса на уровне изоляции SERIALIZABLE, компонент Компонент Database EngineDatabase Engine должен установить блокировку таблицы для защиты целостности данных.For example, when you are scanning a table that has no clustered index under the serializable isolation level, Компонент Database EngineDatabase Engine must take a table lock to protect data integrity.

REBUILDREBUILD
Используйте синтаксис REBUILD WITH для перестроения всей таблицы, включая все секции в секционированную таблицу.Use the REBUILD WITH syntax to rebuild an entire table including all the partitions in a partitioned table. Если в таблице содержится кластеризованный индекс, то параметр REBUILD перестраивает его.If the table has a clustered index, the REBUILD option rebuilds the clustered index. REBUILD может выполняться как операция в режиме ONLINE.REBUILD can be performed as an ONLINE operation.

Используйте синтаксис REBUILD PARTITION для перестроения одной секции в секционированной таблице.Use the REBUILD PARTITION syntax to rebuild a single partition in a partitioned table.

PARTITION = ALLPARTITION = ALL
Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Перестраивает все секции при изменении настройки сжатия секций.Rebuilds all partitions when changing the partition compression settings.

REBUILD WITH ( <rebuild_option >)REBUILD WITH ( <rebuild_option> )
Все параметры применяются к таблице с кластеризованным индексом.All options apply to a table with a clustered index. Если в таблице не содержится кластеризованный индекс, то на структуру кучи влияют только определенные параметры.If the table does not have a clustered index, the heap structure is only affected by some of the options.

Если определенный параметр сжатия не был указан с помощью операции REBUILD, то для секции будет использован текущий параметр сжатия.When a specific compression setting is not specified with the REBUILD operation, the current compression setting for the partition is used. Чтобы получить текущее значение параметра, запросите data_compression столбца в sys.partitions представления каталога.To return the current setting, query the data_compression column in the sys.partitions catalog view.

Полное описание этих параметров перестроения см index_option ( Transact-SQL ) .For complete descriptions of the rebuild options, see index_option (Transact-SQL).

DATA_COMPRESSIONDATA_COMPRESSION
Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Задает режим сжатия данных для указанной таблицы, номера секции или диапазона секций.Specifies the data compression option for the specified table, partition number, or range of partitions. Существуют следующие параметры выбора.The options are as follows:

NoneNONE
Таблица или указанные секции не сжимаются.Table or specified partitions are not compressed. Это не относится к таблицам columnstore.This does not apply to columnstore tables.

ROWROW
Таблицы или указанные секции сжимаются, используя сжатие строк.Table or specified partitions are compressed by using row compression. Это не относится к таблицам columnstore.This does not apply to columnstore tables.

PAGEPAGE
Таблицы или указанные секции сжимаются, используя сжатие страниц.Table or specified partitions are compressed by using page compression. Это не относится к таблицам columnstore.This does not apply to columnstore tables.

COLUMNSTORECOLUMNSTORE
Применяется к: SQL Server 2014SQL Server 2014 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Применяется только к таблицам columnstore.Applies only to columnstore tables. COLUMNSTORE указывает, что должна быть распакована секция, которая была упакована с помощью параметра COLUMNSTORE_ARCHIVE.COLUMNSTORE specifies to decompress a partition that was compressed with the COLUMNSTORE_ARCHIVE option. При восстановлении данных сжатие будет продолжаться с применением сжатия columnstore, предусмотренного для всех таблиц columnstore.When the data is restored, it will continue to be compressed with the columnstore compression that is used for all columnstore tables.

COLUMNSTORE_ARCHIVECOLUMNSTORE_ARCHIVE
Применяется к: SQL Server 2014SQL Server 2014 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Применяется только к таблицам columnstore, представляющим собой таблицы, которые хранятся с кластеризованным индексом columnstore.Applies only to columnstore tables, which are tables stored with a clustered columnstore index. Параметр COLUMNSTORE_ARCHIVE обеспечивает дальнейшее сжатие указанной секции до еще меньшего размера.COLUMNSTORE_ARCHIVE will further compress the specified partition to a smaller size. Это может использоваться для архивации или в других ситуациях, где требуется уменьшение объема пространства и допускается увеличение затрат времени на хранение и извлечение.This can be used for archival, or for other situations that require less storage and can afford more time for storage and retrieval

Чтобы перестроить несколько секций, в то же время, в разделе index_option ( Transact-SQL ) .To rebuild multiple partitions at the same time, see index_option (Transact-SQL). Если в таблице отсутствует кластеризованный индекс, то при изменении сжатия данных выполняется перестроение кучи и некластеризованных индексов.If the table does not have a clustered index, changing the data compression rebuilds the heap and the nonclustered indexes. Дополнительные сведения о сжатии см. в разделе сжатие данных.For more information about compression, see Data Compression.

ONLINE = {ON | OFF } <применяемое к single_partition_rebuild_option >ONLINE = { ON | OFF } <as applies to single_partition_rebuild_option>
Определяет, будут ли отдельная секция базовой таблицы и связанные индексы доступны для запросов и изменения данных во время операций с индексами.Specifies whether a single partition of the underlying tables and associated indexes are available for queries and data modification during the index operation. Значение по умолчанию — OFF.The default is OFF. REBUILD может выполняться как операция в режиме ONLINE.REBUILD can be performed as an ONLINE operation.

ONON
Долгосрочные блокировки таблицы не поддерживаются во время операций с индексами.Long-term table locks are not held for the duration of the index operation. Необходимо наличие S-блокировки таблицы в начале перестройки индекса и блокировки Sch-M на таблице в конце перестроения индекса в режиме «в сети».A 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. Обе блокировки являются короткими блокировками метаданных, но при этом блокировка изменения схемы (Sch-M) должна ожидать завершения всех блокирующих транзакций.Although both locks are short metadata locks, especially the Sch-M lock must wait for all blocking transactions to be completed. Во время ожидания Sch-M блокирует все другие транзакции, ожидающие за этой блокировкой доступа к одной таблице.During the wait time the Sch-M lock blocks all other transactions that wait behind this lock when accessing the same table.

Примечание

Перестроение индекса в сети можно задать low_priority_lock_wait параметров, описанных далее в этом разделе.Online index rebuild can set the low_priority_lock_wait options described later in this section.

OFFOFF
Блокировки таблиц применяются во время выполнения операций с индексами.Table locks are applied for the duration of the index operation. Это предотвращает доступ к базовой таблице всех пользователей во время операции.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
Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Имя набора столбцов.Is the name of the column set. Набор столбцов представляет собой нетипизированное XML-представление, в котором все разреженные столбцы таблицы объединены в структурированные выходные данные.A column set is an untyped XML representation that combines all of the sparse columns of a table into a structured output. Набор столбцов не может быть добавлен в таблицу, если в ней содержатся разреженные столбцы.A column set cannot be added to a table that contains sparse columns. Дополнительные сведения о наборах столбцов см. в разделе Использование наборов столбцов.For more information about column sets, see Use Column Sets.

{ ENABLE | DISABLE } FILETABLE_NAMESPACE{ ENABLE | DISABLE } FILETABLE_NAMESPACE
Область применения: начиная с SQL Server 2012SQL Server 2012 до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

Включает или выключает ограничения для таблицы FileTable, заданные системой.Enables or disables the system-defined constraints on a FileTable. Может использоваться только для таблицы FileTable.Can only be used with a FileTable.

ЗАДАЙТЕ (FILETABLE_DIRECTORY = directory_name )SET ( FILETABLE_DIRECTORY = directory_name )
Область применения: начиная с SQL Server 2012SQL Server 2012 до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

Указывает имя каталога таблицы FileTable, совместимое с Windows.Specifies the Windows-compatible FileTable directory name. Это имя должно быть уникальным среди всех имен каталогов FileTable в базе данных.This name should be unique among all the FileTable directory names in the database. Проверка уникальности не учитывает регистр символов независимо от параметров сортировки SQL.Uniqueness comparison is case-insensitive, regardless of SQL collation settings. Может использоваться только для таблицы 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] )  
        } )  

Применяется к: SQL Server 2017SQL Server 2017.Applies to: SQL Server 2017SQL Server 2017.

Включает или отключает базы данных Stretch для таблицы.Enables or disables Stretch Database for a table. Дополнительные сведения см. в разделе Stretch Database.For more info, see Stretch Database.

Включение базы данных Stretch для таблицыEnabling Stretch Database for a table

Если включить растяжение для таблицы, указав ON, необходимо также указать MIGRATION_STATE = OUTBOUND начинается немедленно, перенос данных или MIGRATION_STATE = PAUSED чтобы отложить перенос данных.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. Значение по умолчанию — MIGRATION_STATE = OUTBOUND.The default value is MIGRATION_STATE = OUTBOUND. Дополнительные сведения о включении растяжения для таблицы см. в разделе включения базы данных Stretch для таблицы.For more info about enabling Stretch for a table, see Enable Stretch Database for a table.

Предварительные требования.Prerequisites. Прежде чем включать Stretch для таблицы, необходимо включить растяжение на сервере и в базе данных.Before you enable Stretch for a table, you have to enable Stretch on the server and on the database. Дополнительные сведения см. в разделе Enable Stretch Database for a database.For more info, see Enable Stretch Database for a database.

Разрешения.Permissions. Включение Stretch для базы данных или таблицы требуются права db_owner.Enabling Stretch for a database or a table requires db_owner permissions. Включение Stretch для таблицы также требуется разрешение ALTER на таблицу.Enabling Stretch for a table also requires ALTER permissions on the table.

Отключение базы данных Stretch для таблицыDisabling Stretch Database for a table

При отключении Stretch для таблицы имеется два варианта удаленных данных, уже перенесенные в Azure.When you disable Stretch for a table, you have two options for the remote data that has already been migrated to Azure. Дополнительные сведения см. в разделе Отключение Stretch Database и возврат удаленных данных.For more info, see Disable Stretch Database and bring back remote data.

  • Чтобы отключить базу данных Stretch для таблицы и скопировать удаленные данные из Azure обратно в SQL Server, запустите следующую команду.To disable Stretch for a table and copy the remote data for the table from Azure back to SQL Server, run the following command. Эту команду нельзя отменить.This command can't be canceled.

    ALTER TABLE \<table name>
       SET ( REMOTE_DATA_ARCHIVE ( MIGRATION_STATE = INBOUND ) ) ;  
    

    Эта операция предусматривает расходы на передачу данных и не может быть отменена.This operation incurs data transfer costs, and it can't be canceled. Дополнительные сведения см. на странице Сведения о ценах —передача данных.For more info, see Data Transfers Pricing Details.

    После копирования всех удаленных данных из Azure в SQL Server база данных Stretch для таблицы будет отключена.After all the remote data has been copied from Azure back to SQL Server, Stretch is disabled for the table.

  • Чтобы отключить растяжение для таблицы и отказаться от удаленных данных, выполните следующую команду.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 ) ) ;  
    

    Когда вы отключите Stretch Database для таблицы, перенос данных остановится, а результаты запроса больше не будут включать результаты из удаленной таблицы.After you disable Stretch Database for a table, data migration stops and query results no longer include results from the remote table.

    Отключение растягивания удаленной таблицы, не удаляются.Disabling Stretch does not remove the remote table. Если вы хотите удалить размещенную удаленно таблицу, вам нужно сделать это с помощью портала управления Azure.If you want to delete the remote table, you have to drop it by using the Azure management portal.

[FILTER_PREDICATE = {null | предикат }][ FILTER_PREDICATE = { null | predicate } ]
Применяется к: SQL Server 2017SQL Server 2017.Applies to: SQL Server 2017SQL Server 2017.

При необходимости указывает предикат фильтра для выбора строк для миграции из таблицы, которая содержит исторические и текущие данные.Optionally specifies a filter predicate to select rows to migrate from a table that contains both historical and current data. Этот предикат должен вызывать детерминированной встроенной табличной функции.The predicate must call a deterministic inline table-valued function. Дополнительные сведения см. в разделе включения базы данных Stretch для таблицы и Выбор строк для миграции, используя функцию фильтрации ( База данных Stretch ) .For more info, see Enable Stretch Database for a table and Select rows to migrate by using a filter function (Stretch Database).

Важно!

Если указать плохо оптимизированный предикат фильтра, перенос данных будет выполняться медленно.If you provide a filter predicate that performs poorly, data migration also performs poorly. Stretch Database применяет предикат фильтра к таблице при помощи оператора CROSS APPLY.Stretch Database applies the filter predicate to the table by using the CROSS APPLY operator.

Если предикат фильтра не указан, переносится вся таблица.If you don't specify a filter predicate, the entire table is migrated.

При указании предикат фильтра, необходимо указать параметра MIGRATION_STATE.When you specify a filter predicate, you also have to specify MIGRATION_STATE.

ПАРАМЕТРА MIGRATION_STATE = {ИСХОДЯЩИХ | ВХОДЯЩИЙ | ПРИОСТАНОВЛЕНО}MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }
Применяется к: SQL Server 2017SQL Server 2017.Applies to: SQL Server 2017SQL Server 2017.

WAIT_AT_LOW_PRIORITYWAIT_AT_LOW_PRIORITY
Применяется к: SQL Server 2014SQL Server 2014 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Перестроение индекса в режиме «в сети» должно ожидать операции блокировки в этой таблице.An online index rebuild has to wait for blocking operations on this table. WAIT_AT_LOW_PRIORITY указывает, что операция перестроения индекса в сети будет ожидать блокировки с низким приоритетом, позволяя другим операциям продолжить, время ожидания операции оперативного построения индекса.WAIT_AT_LOW_PRIORITY indicates that the online index rebuild operation will wait for low priority locks, allowing other operations to proceed while the online index build operation is waiting. Пропуск WAIT AT LOW PRIORITY параметр эквивалентен WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).Omitting the WAIT AT LOW PRIORITY option is equivalent to WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).

MAX_DURATION = время [МИНУТ ]MAX_DURATION = time [MINUTES ]
Применяется к: SQL Server 2014SQL Server 2014 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Время ожидания (целочисленное значение, указанное в минутах), КОММУТАТОР или блокировки для операции перестроения индекса в сети будут ожидать с низким приоритетом при выполнении команды DDL.The wait time (an integer value specified in minutes) that the SWITCH or online index rebuild locks will wait with low priority when executing the DDL command. Если операция будет заблокирована для MAX_DURATION время один из ABORT_AFTER_WAIT будут выполняться действия.If the operation is blocked for the MAX_DURATION time, one of the ABORT_AFTER_WAIT actions will be executed. MAX_DURATION времени всегда находится в минутах и слово МИНУТ можно опустить.MAX_DURATION time is always in minutes, and the word MINUTES can be omitted.

ABORT_AFTER_WAIT = [NONE | SELF | ПРЕПЯТСТВИЯ }]ABORT_AFTER_WAIT = [NONE | SELF | BLOCKERS } ]
Применяется к: SQL Server 2014SQL Server 2014 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

NoneNONE
Продолжить ожидание блокировки с обычным приоритетом.Continue waiting for the lock with normal (regular) priority.

SELFSELF
Выход КОММУТАТОР или операция DDL перестроения индекса в сети, выполняющейся в данный момент без выполнения действий.Exit the SWITCH or online index rebuild DDL operation currently being executed without taking any action.

BLOCKERSBLOCKERS
Остановить все пользовательские транзакции, которые в данный момент блокирующие КОММУТАТОР или, чтобы можно было продолжить данную операцию операцию DDL по перестроению индекса в сети.Kill all user transactions that block currently the SWITCH or online index rebuild DDL operation so that the operation can continue.

Требуется разрешение ALTER ANY CONNECTION разрешение.Requires ALTER ANY CONNECTION permission.

ЕСЛИ СУЩЕСТВУЕТIF EXISTS
Применяется к: SQL ServerSQL Server ( SQL Server 2016SQL Server 2016 через текущей версии) и База данных SQL AzureAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2016SQL Server 2016 through current version) and База данных SQL AzureAzure SQL Database.

Условно удаляет столбец или ограничение, только в том случае, если он уже существует.Conditionally drops the column or constraint only if it already exists.

RemarksRemarks

Чтобы добавить новые строки данных, используйте вставить.To add new rows of data, use INSERT. Чтобы удалить строки данных, используйте удаление или TRUNCATE TABLE.To remove rows of data, use DELETE or TRUNCATE TABLE. Чтобы изменить значения в существующих строках, используйте обновление.To change the values in existing rows, use UPDATE.

При наличии в кэше процедур каких-либо планов выполнения, ссылающихся на таблицу, инструкция ALTER TABLE помечает их как подлежащие перекомпиляции в их следующем выполнении.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.

Изменение размера столбцаChanging the Size of a Column

Длину, точность и масштаб столбца можно изменить, указав новый размер для типа данных столбца в предложении ALTER COLUMN.You can change the length, precision, or scale of a column by specifying a new size for the column data type in the ALTER COLUMN clause. Если в столбце имеются данные, новый размер не может быть меньше максимального размера данных.If data exists in the column, the new size cannot be smaller than the maximum size of the data. Кроме того, столбец нельзя определить в индексе, если столбец не принадлежит varchar, nvarchar, или varbinary тип данных и индекс не является результатом ПЕРВИЧНОГО ключа ограничение.Also, the column cannot be defined in an index, unless the column is a varchar, nvarchar, or varbinary data type and the index is not the result of a PRIMARY KEY constraint. См. пример Р.See example P.

Блокировки и инструкция ALTER TABLELocks and ALTER TABLE

Изменения, указанные в инструкции ALTER TABLE, воплощаются немедленно.The changes specified in ALTER TABLE are implemented immediately. Если для изменений требуется модификация строк таблицы, то инструкция ALTER TABLE обновляет эти строки.If the changes require modifications of the rows in the table, ALTER TABLE updates the rows. Инструкция ALTER TABLE получает блокировку модификации схемы (SCH-M) для таблицы, чтобы убедиться, что в процессе изменения другие соединения не ссылаются даже на метаданные таблицы, за исключением операций с индексами в сети, требующих очень короткой блокировки SCH-M в конце.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 very short SCH-M lock at the end. В ALTER TABLE…SWITCH операции, блокировка is получена для исходной и целевой таблиц.In an ALTER TABLE…SWITCH operation, the lock is acquired on both the source and target tables. Изменения, сделанные в таблице, регистрируются в журнале и полностью обратимы.The modifications made to the table are logged and fully recoverable. Изменения, затрагивающие все строки в очень больших таблицах, например удаление столбца или (в некоторых выпусках SQL ServerSQL Server) добавление столбца NOT NULL со значением по умолчанию, могут занять длительное время и привести к созданию множества записей в журнале.Changes that affect all the rows in very 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. Данные инструкции ALTER TABLE следует выполнять с той же осторожностью, что и любые инструкции INSERT, UPDATE или DELETE, влияющие на множество строк.These ALTER TABLE statements should be executed with the same care as any INSERT, UPDATE, or DELETE statement that affects many rows.

Добавление столбцов NOT NULL в качестве операции в сетиAdding NOT NULL Columns as an Online Operation

Начиная с SQL Server 2012SQL Server 2012 Enterprise Edition, добавление столбца NOT NULL со значением по умолчанию является операцией в сети, если значение по умолчанию — константой времени выполнения.Starting with SQL Server 2012SQL Server 2012 Enterprise Edition, adding a NOT NULL column with a default value is an online operation when the default value is a runtime constant. Это значит, что операция выполняется почти мгновенно, независимо от количества строк в таблице.This means that the operation is completed almost instantaneously regardless of the number of rows in the table. Так происходит потому, что существующие строки в таблице не обновляются в ходе операции. Вместо этого значение по умолчанию сохраняется только в метаданных таблицы, и это значение подставляется по мере необходимости в запросах, обращающихся к этим строкам.This is because the existing rows in the table are not updated during the operation; 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. Такой режим работы действует автоматически. Для реализации операции в сети достаточно синтаксиса ADD COLUMN.This behavior is automatic; no additional syntax is required to implement the online operation beyond the ADD COLUMN syntax. Константа времени выполнения — это выражение, которое имеет одно и то же значение во время выполнения для каждой строки в таблице независимо от ее детерминизма.A runtime constant is an expression that produces the same value at runtime for each row in the table regardless of its determinism. Например, выражение константы «Временные данные» и системная функция GETUTCDATETIME() являются константами времени выполнения.For example, the constant expression "My temporary data", or the system function GETUTCDATETIME() are runtime constants. В отличие от этого, функции NEWID() или NEWSEQUENTIALID() не являются константами времени выполнения, так как для каждой строки в таблице создается уникальное значение.In contrast, the functions NEWID() or NEWSEQUENTIALID() are not runtime constants because a unique value is produced for each row in the table. Добавление столбца NOT NULL со значением по умолчанию, которое не является константой времени выполнения, всегда выполняется вне сети, и в течение этой операции накладывается монопольная блокировка (SCH-M).Adding a NOT NULL column with a default value that is not a runtime constant is always performed offline and an exclusive (SCH-M) lock is acquired for the duration of the operation.

Хотя существующие строки ссылаются на значение, хранящееся в метаданных, значение по умолчанию хранится в строке для всех новых строк, которые вставляются без указания другого значения для столбца.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 do not specify another value for the column. Значение по умолчанию, хранящееся в метаданных, перемещается в существующую строку, когда строка обновляется (даже если в инструкции UPDATE не указан фактический столбец), а также когда перестраивается таблица или кластеризованный индекс.The default value stored in metadata is moved to an existing row when the row is updated (even if the actual column is not specified in the UPDATE statement), or if the table or clustered index is rebuilt.

Столбцы типа varchar(max), nvarchar(max), varbinary(max), xml, текст, ntext, изображения, hierarchyid, geometry, geography, или определяемых пользователем ТИПОВ CLR нельзя добавить в операцию в оперативном режиме.Columns of type varchar(max), nvarchar(max), varbinary(max), xml, text, ntext, image, hierarchyid, geometry, geography, or CLR UDTS, cannot be added in an online operation. Столбец нельзя добавлять в сети, если в результате такой операции максимальный размер строки превысит ограничение в 8060 байт.A column cannot be added online if doing so causes the maximum possible row size to exceed the 8,060 byte limit. В этом случае столбец добавляется в рамках операции вне сети.The column is added as an offline operation in this case.

Выполнение параллельного планаParallel Plan Execution

В Microsoft SQL Server 2012 EnterpriseMicrosoft SQL Server 2012 Enterprise и более поздних версиях число процессоров, применяемых для выполнения одной инструкции ALTER TABLE ADD (на базе индекса) CONSTRAINT или DROP (кластеризованный индекс) CONSTRAINT, определяется с максимальная степень параллелизма конфигурации параметр и текущей рабочей нагрузки.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. Если компонент Компонент Database EngineDatabase Engine определяет, что система занята, то перед началом выполнения инструкции степень параллелизма операции автоматически понижается.If the Компонент Database EngineDatabase Engine detects that the system is busy, the degree of parallelism of the operation is automatically reduced before statement execution starts. Можно вручную настроить число процессоров, применяемых для запуска инструкции, указав параметр MAXDOP.You can manually configure the number of processors that are used to run the statement by specifying the MAXDOP option. Дополнительные сведения см. в разделе Настройка параметра конфигурации сервера max degree of parallelism.For more information, see Configure the max degree of parallelism Server Configuration Option.

Секционированные таблицыPartitioned Tables

Помимо выполнения операций SWITCH, затрагивающих секционированные таблицы, инструкция ALTER TABLE может использоваться для изменения состояния столбцов, ограничений и триггеров секционированной таблицы точно так же, как она используется для несекционированных таблиц.In addition to performing SWITCH operations that involve partitioned tables, ALTER TABLE can be used to change the state of the columns, constraints, and triggers of a partitioned table just like it is used for nonpartitioned tables. Однако данная инструкция не может использоваться для изменения способа, которым секционируется сама таблица.However, this statement cannot be used to change the way the table itself is partitioned. Для повторного секционирования секционированной таблицы, используйте ALTER PARTITION SCHEME и ALTER PARTITION FUNCTION.To repartition a partitioned table, use ALTER PARTITION SCHEME and ALTER PARTITION FUNCTION. Кроме того, невозможно изменить тип данных столбца секционированной таблицы.Additionally, you cannot change the data type of a column of a partitioned table.

Ограничения в таблицах с представлениями, привязанными к схемамRestrictions on Tables with Schema-Bound Views

К инструкциям ALTER TABLE в таблицах с представлениями, привязанными к схемам, применяются те же ограничения, которые применяются в текущем времени для изменения таблиц с простым индексом.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. Добавление столбца разрешено.Adding a column is allowed. Однако удаление или изменение столбца, участвующего в любом из представлений, привязанных к схемам, не разрешается.However, removing or changing a column that participates in any schema-bound view is not allowed. Если инструкция ALTER TABLE требует изменения столбца, используемого в привязанном к схеме представлении, то происходит сбой инструкции ALTER TABLE и компонент Компонент Database EngineDatabase Engine выдает сообщение об ошибке.If the ALTER TABLE statement requires changing a column used in a schema-bound view, ALTER TABLE fails and the Компонент Database EngineDatabase Engine raises an error message. Дополнительные сведения о привязке схемы и индексированных представлениях см. в разделе CREATE VIEW ( Transact-SQL ) .For more information about schema binding and indexed views, see CREATE VIEW (Transact-SQL).

Создание ссылающегося на таблицы представления, привязанного к схеме, не влияет на добавление или удаление триггеров в базовых таблицах.Adding or removing triggers on base tables is not affected by creating a schema-bound view that references the tables.

Индексы и инструкция ALTER TABLEIndexes and ALTER TABLE

При удалении ограничений индексы, создаваемые как часть ограничения, удаляются.Indexes created as part of a constraint are dropped when the constraint is dropped. Индексы, создаваемые при помощи инструкции CREATE INDEX, должны удаляться при помощи инструкции DROP INDEX.Indexes that were created with CREATE INDEX must be dropped with DROP INDEX. Инструкция ALTER INDEX может использоваться для перестроения индексной части определения ограничения; не следует удалять и вновь добавлять ограничение при помощи инструкции ALTER TABLE.The ALTER INDEX statement can be used to rebuild an index part of a constraint definition; the constraint does not have to be dropped and added again with ALTER TABLE.

Перед удалением столбца необходимо удалить все индексы и ограничения, основанные на столбце.All indexes and constraints based on a column must be removed before the column can be removed.

После удаления ограничения, создавшего кластеризованный индекс, строки данных, хранившиеся на конечном уровне кластеризованного индекса, хранятся в некластеризованной таблице.When a constraint that created a clustered index is deleted, the data rows that were stored in the leaf level of the clustered index are stored in a nonclustered table. Можно удалить кластеризованный индекс и переместить полученную в результате таблицу в другую файловую группу или схему секционирования в одной транзакции, указав параметр 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. Параметр MOVE TO обладает следующими ограничениями.The MOVE TO option has the following restrictions:

  • Параметр MOVE TO недопустим для индексированных представлений и некластеризованных индексов.MOVE TO is not valid for indexed views or nonclustered indexes.
  • Схема секционирования или файловая группа уже должна существовать.The partition scheme or filegroup must already exist.
  • Если не указан аргумент MOVE TO, то таблица будет размещена в той же схеме секционирования или файловой группе, которая была определена для кластеризованного индекса.If MOVE TO is not specified, the table will be located in the same partition scheme or filegroup as was defined for the clustered index.

При удалении кластеризованного индекса можно указать ONLINE = на параметр, так что транзакция DROP INDEX не будет блокировать запросы и изменения базовых данных и связанных некластеризованных индексов.When you drop a clustered index, you can specify ONLINE = ON option so the DROP INDEX transaction does not block queries and modifications to the underlying data and associated nonclustered indexes.

ONLINE = ON имеет следующие ограничения:ONLINE = ON has the following restrictions:

  • ONLINE = ON недопустимо для кластеризованных индексов, которые также отключены.ONLINE = ON is not valid for clustered indexes that are also disabled. Отключенные индексы должны удаляться при помощи параметра ONLINE = OFF.Disabled indexes must be dropped by using ONLINE = OFF.
  • Только один индекс может удаляться единовременно.Only one index at a time can be dropped.
  • ONLINE = ON недопустимо для индексированного представления, некластеризованных индексов или индексов в локальных временных таблицах.ONLINE = ON is not valid for indexed views, nonclustered indexes or indexes on local temp tables.
  • ONLINE = ON недопустимо для индексов columnstore.ONLINE = ON is not valid for columnstore indexes.

Для удаления кластеризованного индекса временно требуется место на диске, равное размеру существующего кластеризованного индекса.Temporary disk space equal to the size of the existing clustered index is required to drop a clustered index. Это дополнительное пространство освобождается сразу после завершения операции.This additional space is released as soon as the operation is completed.

Примечание

Параметры, перечисленные в <drop_clustered_constraint_option > применяются к кластеризованным индексам таблиц и не может применяться к кластеризованным индексам представлений или некластеризованных индексов.The options listed under <drop_clustered_constraint_option> apply to clustered indexes on tables and cannot be applied to clustered indexes on views or nonclustered indexes.

Репликация изменений схемыReplicating Schema Changes

По умолчанию при выполнении команды ALTER TABLE для опубликованной таблицы в издателе SQL ServerSQL Server Publisher это изменение распространяется для всех подписчиков SQL ServerSQL Server.By default, when you run ALTER TABLE on a published table at a SQL ServerSQL Server Publisher, that change is propagated to all SQL ServerSQL Server Subscribers. Эта функция имеет некоторые ограничения и может быть отключена.This functionality has some restrictions and can be disabled. Дополнительные сведения см. в статье Внесение изменений в схемы баз данных публикации.For more information, see Make Schema Changes on Publication Databases.

Data CompressionData Compression

В системных таблицах не может быть включено сжатие.System tables cannot be enabled for compression. Если таблица является кучей, то операция перестроения в режиме ONLINE будет однопотоковой.If the table is a heap, the rebuild operation for ONLINE mode will be single threaded. Используйте режим OFFLINE для выполнения многопотоковых операций перестроения кучи.Use OFFLINE mode for a multi-threaded heap rebuild operation. Дополнительные сведения о сжатии данных см. в разделесжатие данных.For a more information about data compression, seeData Compression.

Оценить состояние сжатия таблицы, индекса или секции можно с помощью хранимой процедуры 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.

На секционированные таблицы налагаются следующие ограничения.The following restrictions apply to partitioned tables:

  • Если у таблицы есть невыровненные индексы, изменить настройку сжатия отдельной секции невозможно.You cannot change the compression setting of a single partition if the table has nonaligned indexes.
  • Инструкция ALTER TABLE <таблицы > REBUILD PARTITION... производит перестроение указанной секции.The ALTER TABLE <table> REBUILD PARTITION ... syntax rebuilds the specified partition.
  • Инструкция ALTER TABLE <таблицы > REBUILD WITH... производит перестроение всех секций.The ALTER TABLE <table> REBUILD WITH ... syntax rebuilds all partitions.

Удаление столбцов NTEXTDropping NTEXT Columns

При удалении столбцов NTEXT очистка удаленных данных выполняется как сериализованная операция для всех строк.When dropping NTEXT columns, the cleanup of the deleted data occurs as a serialized operation on all rows. Это может потребовать значительного времени.This can require a substantial time. При удалении столбца NTEXT в таблице с большим количеством строк сначала задайте в столбце NTEXT значение NULL, а затем удалите столбец.When dropping an NTEXT column in a table with a large number rows, update the NTEXT column to NULL value first, then drop the column. Это можно выполнить с помощью параллельных операций, причем сделать это намного быстрее.This can be performed with parallel operations and can be much faster.

Перестроение индексов в режиме «в сети».Online Index Rebuild

Для выполнения инструкции DDL для перестроения индекса в режиме «в сети» все активные блокирующие транзакции, выполняемые для конкретной таблицы, должны быть завершены.In order to execute the DDL statement for an online index rebuild, all active blocking transactions running on a particular table must be completed. Если выполняется перестроение индекса в режиме «в сети», то все новые транзакции, готовые к выполнению на данной таблице, блокируются.When the online index rebuild executes, it blocks all new transactions that are ready to start execution on this table. Хотя продолжительность блокировки для перестроения индекса в режиме «в сети» очень коротка, ожидание завершения всех открытых транзакций на данной таблице и блокировка новых запускаемых транзакций может значительно отразиться на пропускной способности и времени выполнения операции, а также значительно ограничить доступ к базовой таблице.Although the duration of the lock for online index rebuild is very short, waiting for all open transactions on a given table to complete and blocking the new transactions to start, might significantly affect the throughput, causing a workload slow down or timeout, and significantly limit access to the underlying table. WAIT_AT_LOW_PRIORITY параметр позволяет администратору базы данных управлять S-lock и Sch-M блокировками, необходимыми для индекса в сети перестраивает и их можно выбрать один из трех значений.The WAIT_AT_LOW_PRIORITY option allows DBA's to manage the S-lock and Sch-M locks required for online index rebuilds and allows them to select one of 3 options. Во всех 3 случаях, если во время ожидания ( (MAX_DURATION =n [minutes]) ) нет блокирующих действий, то перестроение индекса в режиме «в сети» выполняется немедленно и без ожидания завершения инструкции DDL.In all 3 cases, if during the wait time ( (MAX_DURATION =n [minutes]) ) there are no blocking activities, the online index rebuild is executed immediately without waiting and the DDL statement is completed.

Поддержка совместимостиCompatibility Support

В инструкции ALTER TABLE разрешается использовать только имена таблиц, составленные из двух частей (схема.объект).The ALTER TABLE statement allows only two-part (schema.object) table names. В SQL Server 2017SQL Server 2017 при задании имени таблицы в приведенных далее форматах во время компиляции возникает ошибка 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.table
  • «.база_данных.схема.таблица».database.schema.table
  • «..схема.таблица»..schema.table

В предыдущих версиях при задании формата «сервер.база_данных.схема.таблица» возникала ошибка 4902.In earlier versions specifying the format server.database.schema.table returned error 4902. Формат «.база_данных.схема.таблица» или «..схема.таблица» обрабатывался успешно.Specifying the format .database.schema.table or the format ..schema.table succeeded.

Чтобы устранить эту проблему, используйте четырехкомпонентный префикс.To resolve the problem, remove the use of a 4-part prefix.

РазрешенияPermissions

Требуется разрешение ALTER на таблицу.Requires ALTER permission on the table.

Разрешения ALTER TABLE применяются к обеим таблицам, затронутым инструкцией ALTER TABLE SWITCH.ALTER TABLE permissions apply to both tables involved in an ALTER TABLE SWITCH statement. Любые переключенные данные наследуют защиту целевой таблицы.Any data that is switched inherits the security of the target table.

Если какой-либо из столбцов в инструкции ALTER TABLE является определяемым пользователем типом для среды CLR или как псевдоним типа данных, то на этот тип требуется разрешение REFERENCES.If any columns in the ALTER TABLE statement are defined to be of a common language runtime (CLR) user-defined type or alias data type, REFERENCES permission on the type is required.

Добавление столбца, который обновляет строки таблицы требует обновление разрешение на таблицу.Adding a column that updates the rows of the table requires UPDATE permission on the table. Например, при добавлении NOT NULL столбец со значением по умолчанию или добавление столбца идентификаторов, если таблица не пуста.For example, adding a NOT NULL column with a default value or adding an identity column when the table is not empty.

ПримерыExamples

КатегорияCategory Используемые элементы синтаксисаFeatured syntax elements
Добавление столбцов и ограниченийAdding columns and constraints ADD • PRIMARY KEY с параметрами индекса • разреженные столбцы и наборы столбцов •ADD • PRIMARY KEY with index options • sparse columns and column sets •
Удаление столбцов и ограниченийDropping columns and constraints DROPDROP
Изменение определения столбцаAltering a column definition изменение типа данных • изменение размера столбца • параметры сортировкиchange data type • change column size • collation
Изменение определения таблицыAltering a table definition DATA_COMPRESSION • SWITCH PARTITION • LOCK ESCALATION • отслеживание измененийDATA_COMPRESSION • SWITCH PARTITION • LOCK ESCALATION • change tracking
Отключение и включение ограничений и триггеровDisabling and enabling constraints and triggers CHECK • NO CHECK • ENABLE TRIGGER • DISABLE TRIGGERCHECK • NO CHECK • ENABLE TRIGGER • DISABLE TRIGGER

Добавление столбцов и ограниченийAdding Columns and Constraints

В примерах из этого раздела показано добавление в таблицу столбцов и ограничений.Examples in this section demonstrate adding columns and constraints to a table.

A.A. Добавление нового столбцаAdding a new column

Следующий пример показывает добавление столбца, который допускает значения NULL и не имеет значений, предоставленных через определение DEFAULT.The following example adds a column that allows null values and has no values provided through a DEFAULT definition. В новом столбце в каждой строке будет значение 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. Добавление столбца с ограничениемAdding a column with a constraint

В следующем примере показано добавление нового столбца с ограничением 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. Добавление непроверяемого ограничения CHECK к существующему столбцуAdding an unverified CHECK constraint to an existing column

В следующем примере к существующему столбцу в таблице добавляется ограничение.The following example adds a constraint to an existing column in the table. Столбец имеет значение, нарушающее это ограничение.The column has a value that violates the constraint. Поэтому во избежание проверки ограничения относительно существующих строк, а также для того, чтобы разрешить добавление ограничения, применяется WITH NOCHECK.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. Добавление ограничения DEFAULT к существующему столбцуAdding a DEFAULT constraint to an existing column

Следующий пример показывает создание таблицы с двумя столбцами и заполнение значениями первого столбца; в другом столбце остается NULL.The following example creates a table with two columns and inserts a value into the first column, and the other column remains NULL. В таком случае во второй столбец добавляется ограничение DEFAULT.A DEFAULT constraint is then added to the second column. Чтобы проверить применение значения по умолчанию, в первый столбец вставляется другое значение и создается запрос к таблице.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. Добавление нескольких столбцов с ограничениямиAdding several columns with constraints

Следующий пример показывает добавление нескольких столбцов с ограничениями, которые определяются с помощью нового столбца.The following example adds several columns with constraints defined with the new column. Первый новый столбец имеет свойство IDENTITY.The first new column has an IDENTITY property. Каждая строка таблицы имеет новые добавочные значения в столбце идентификаторов.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. Добавление столбца, допускающего значения NULL, со значениями по умолчаниюAdding a nullable column with default values

Следующий пример показывает добавление столбца, допускающего значения NULL, с определением DEFAULT и использование WITH VALUES для предоставления значений каждой строке таблицы.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. Если аргумент WITH VALUES не используется, то каждая строка в новом столбце имеет значение NULL.If WITH VALUES is not 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. Создание ограничения PRIMARY KEY с параметрами индексаCreating a PRIMARY KEY constraint with index options

Следующий пример показывает создание ограничения PRIMARY KEY PK_TransactionHistoryArchive_TransactionID и установку параметров FILLFACTOR, ONLINE и PAD_INDEX.The following example creates the PRIMARY KEY constraint PK_TransactionHistoryArchive_TransactionID and sets the options FILLFACTOR, ONLINE, and PAD_INDEX. Результирующий кластеризованный индекс будет иметь такое же имя, что и ограничение.The resulting clustered index will have the same name as the constraint.

Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

USE AdventureWorks2012;  
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  

З.H. Добавление разреженного столбцаAdding a sparse column

В следующих примерах показывается добавление и изменение разреженных столбцов в таблице T1.The following examples show adding and modifying sparse columns in table T1. Код для создания таблицы T1: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  

Чтобы добавить дополнительный разреженный столбец C5, выполните следующую инструкцию.To add an additional sparse column C5, execute the following statement.

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

Чтобы преобразовать неразреженный столбец C4 в разреженный, выполните следующую инструкцию.To convert the C4 non-sparse column to a sparse column, execute the following statement.

ALTER TABLE T1  
ALTER COLUMN C4 ADD SPARSE ;  
GO  

Для преобразования C4 разреженных столбцов в Неразреженный, выполните следующую инструкцию.To convert the C4 sparse column to a nonsparse column, execute the following statement.

ALTER TABLE T1  
ALTER COLUMN C4 DROP SPARSE;  
GO  

И.I. Добавление набора столбцовAdding a column set

В следующих примерах показано добавление столбца к таблице T2.The following examples show adding a column to table T2. Набор столбцов не может быть добавлен в таблицу, если в ней уже содержатся разреженные столбцы.A column set cannot be added to a table that already contains sparse columns. Код для создания таблицы T2: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  

В следующих трех инструкциях добавляется набор столбцов с именем CS, после чего изменяются столбцы C2 и C3 на 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. Добавление зашифрованного столбцаAdding an encrypted column

Следующая инструкция добавляет зашифрованный столбец с именем 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') ;  

Удаление столбцов и ограниченийDropping Columns and Constraints

Приведенные в этом разделе примеры демонстрируют удаление столбцов и ограничений.The examples in this section demonstrate dropping columns and constraints.

A.A. Удаление столбца или столбцовDropping a column or columns

В первом примере для удаления столбца изменяется таблица.The first example modifies a table to remove a column. Во втором примере удаляется несколько столбцов.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. Удаление ограничений и столбцовDropping constraints and columns

В первом примере из таблицы удаляется ограничение UNIQUE.The first example removes a UNIQUE constraint from a table. Во втором примере удаляется 2 ограничения и один столбец.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 CONSTRAINT my_constraint, my_pk_constraint, COLUMN column_b ;  
GO  

В.C. Удаление ограничения PRIMARY KEY в режиме ONLINEDropping a PRIMARY KEY constraint in the ONLINE mode

В следующем примере удаляется ограничение PRIMARY KEY с параметром ONLINE, имеющим значение 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. Добавление и удаление ограничения FOREIGN KEYAdding and dropping a FOREIGN KEY constraint

Следующий пример показывает создание таблицы ContactBackup, а затем ее изменение сначала добавлением ограничения FOREIGN KEY, ссылающегося на таблицу Person.Person, затем удалением ограничения 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_ContactBacup_Contact FOREIGN KEY (ContactID)  
    REFERENCES Person.Person (BusinessEntityID) ;  
GO  

ALTER TABLE Person.ContactBackup  
DROP CONSTRAINT FK_ContactBacup_Contact ;  
GO  

DROP TABLE Person.ContactBackup ;  

Значок стрелки, используемый с обратно к верхней примерыArrow icon used with Back to Top link Examples

Изменение определения столбцаAltering a Column Definition

A.A. изменение типа данных столбца.Changing the data type of a column

В следующем примере столбец таблицы изменяется с INT на 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. Изменение размера столбцаChanging the size of a column

В следующем примере увеличивается размер varchar столбца и точность и масштаб десятичное столбца.The following example increases the size of a varchar column and the precision and scale of a decimal column. Поскольку столбцы содержат данные, их размер можно только увеличить.Because the columns contain data, the column size can only be increased. Также обратите внимание, что столбец col_a определяется в уникальном индексе.Also notice that col_a is defined in a unique index. Размер col_a по-прежнему может повыситься, поскольку тип данных varchar и индекс не является результатом ограничения PRIMARY KEY.The size of col_a can still be increased because the data type is a varchar and the index is not 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. Изменение параметров сортировки столбцаChanging column collation

В следующем примере демонстрируется изменение параметров сортировки столбца.The following example shows how to change the collation of a column. Сначала создается таблица с параметрами сортировки пользователя по умолчанию.Frist, 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  

Затем параметры сортировки столбца C2 изменяются на Latin1_General_BIN.Next, column C2 collation is changed to Latin1_General_BIN. Обратите внимание, что необходимо указать тип данных, хотя он не изменяется.Note that the data type is required, even though it is not changed.

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

Изменение определения таблицыAltering a Table Definition

В приведенных в этом разделе примерах показано, как изменить определение таблицы.The examples in this section demonstrate how to alter the definition of a table.

A.A. Изменение таблицы для изменения режима сжатияModifying a table to change the compression

В следующем примере изменяется режим сжатия несекционированной таблицы.The following example changes the compression of a nonpartitioned table. Куча или кластеризованный индекс будет перестроен.The heap or clustered index will be rebuilt. Если таблица является кучей, то все некластеризованные индексы будут перестроены.If the table is a heap, all nonclustered indexes will be rebuilt.

ALTER TABLE T1   
REBUILD WITH (DATA_COMPRESSION = PAGE);  

В следующем примере изменяется режим сжатия секционированной таблицы.The following example changes the compression of a partitioned table. Инструкция REBUILD PARTITION = 1 вызывает перестройку только секции с номером 1.The REBUILD PARTITION = 1 syntax causes only partition number 1 to be rebuilt.

Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

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

Та же операция, использующая следующий альтернативный синтаксис, вызывает повторное построение всех секций в таблице.The same operation using the following alternate syntax causes all partitions in the table to be rebuilt.

Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

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

Дополнительные примеры сжатия данных, в разделе сжатие данных.For additional data compression examples, see Data Compression.

Б.B. Модификация таблицы columnstore для изменения архивного сжатияModifying a columnstore table to change archival compression

Следующий пример показывает, как дополнительно сжать секцию таблицы columnstore, применяя дополнительный алгоритм сжатия.The following example further compresses a columnstore table partition by applying an additional compression algorithm. Это приводит к дальнейшему уменьшению размера таблицы, но вместе с тем к увеличению затрат времени на сохранение и выборку данных.This reduces the table to a smaller size, but also increases the time required for storage and retrieval. Это может использоваться для архивации или в тех ситуациях, где требуется уменьшение объема пространства и допускается увеличение затрат времени на сохранение и выборку.This is useful for archiving or for situations that require less space and can afford more time for storage and retrieval.

Применяется к: SQL Server 2014SQL Server 2014 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

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

В следующем примере показана распаковка секции таблицы columnstore, которая была упакована с параметром COLUMNSTORE_ARCHIVE.The following example decompresses a columnstore table partition that was compressed with COLUMNSTORE_ARCHIVE option. При восстановлении данных сжатие будет продолжаться с применением сжатия columnstore, предусмотренного для всех таблиц columnstore.When the data is restored, it will continue to be compressed with the columnstore compression that is used for all columnstore tables.

Применяется к: SQL Server 2014SQL Server 2014 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

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

В.C. Переключение секций между таблицамиSwitching partitions between tables

В следующем примере демонстрируется создание секционированной таблицы, исходя из предположения, что схема секционирования myRangePS1 уже создана в базе данных.The following example creates a partitioned table, assuming that partition scheme myRangePS1 is already created in the database. Затем создается несекционированная таблица с такой же структурой, что и секционированная таблица, и в той же файловой группе, что и PARTITION 2 таблицы 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. В таком случае данные PARTITION 2 таблицы PartitionTable переключаются в таблицу 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. Разрешение укрупнения блокировки для секционированных таблицAllowing lock escalation on partitioned tables

В следующем примере укрупнение блокировки разрешается на уровне секции в секционированной таблице.The following example enables lock escalation to the partition level on a partitioned table. Если таблица не секционирована, то блокировка будет укрупняться до уровня TABLE.If the table is not partitioned, lock escalation is set at the TABLE level.

Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

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

Д.E. Настройка отслеживания изменений для таблицыConfiguring change tracking on a table

В следующем примере в таблице Person.Person включается отслеживание изменений.The following example enables change tracking on the Person.Person table.

Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

USE AdventureWorks2012;  
ALTER TABLE Person.Person  
ENABLE CHANGE_TRACKING;  

В следующем примере разрешается отслеживание изменений и отслеживание столбцов, которые обновляются при внесении изменений.The following example enables change tracking and enables the tracking of the columns that are updated during a change.

Область применения: начиная с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

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

В следующем примере в таблице Person.Person отключается отслеживание изменений.The following example disables change tracking on the Person.Person table.

Применяется к: SQL Server 2008SQL Server 2008 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

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

Отключение и включение ограничений и триггеровDisabling and Enabling Constraints and Triggers

A.A. Отключение и повторное включение ограниченияDisabling and re-enabling a constraint

В следующем примере отключается ограничение на зарплату.The following example disables a constraint that limits the salaries accepted in the data. Параметр NOCHECK CONSTRAINT используется в инструкции ALTER TABLE для отключения ограничения и обеспечения возможности вставки, противоречащей указанному ограничению.NOCHECK CONSTRAINT is used with ALTER TABLE to disable the constraint and allow for an insert that would typically violate the constraint. CHECK CONSTRAINT повторно включает ограничение.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. Отключение и повторное включение триггераDisabling and re-enabling a trigger

В следующем примере показывается использование параметра DISABLE TRIGGER инструкции ALTER TABLE для отключения триггера и обеспечения возможности вставки, которая в обычных условиях нарушает триггер.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 используется для повторного включения триггера.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  

Операции в сетиOnline Operations

A.A. Перестроение индекса в режиме «в сети» с помощью параметра «ожидание низких приоритетов».Online index rebuild using low priority wait options

В следующем примере показано, как выполнить перестроение индекса в режиме «в сети», указав параметр «ожидание низких приоритетов».The following example shows how to perform an online index rebuild specifying the low priority wait options.

Применяется к: SQL Server 2014SQL Server 2014 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure 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. Изменение столбца в режиме «в сети»Online Alter Column

В следующем примере показано, как выполняется операция изменения столбца с параметром ONLINE.The following example shows how to perform an alter column operation with the ONLINE option.

Применяется к: SQL Server 2016SQL Server 2016 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure 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  

Система управления версиямиSystem Versioning

Следующие четыре примера помогут ознакомиться с синтаксис для использования системы управления версиями.The following four examples will help you become familiar with the syntax for using system versioning. Для получения дополнительной помощи см Приступая к работе с Темпоральными таблицами с системным управлением версиями.For additional assistance, see Getting Started with System-Versioned Temporal Tables.

Применяется к: SQL Server 2016SQL Server 2016 через SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

A.A. Добавление к существующим таблицам системы управления версиямиAdd System Versioning to Existing Tables

В следующем примере показано добавление системы управления версиями в существующую таблицу и создайте таблицу журнала в будущем.The following example shows how to add system versioning to an existing table and create a future history table. В этом примере предполагается наличие существующей таблицы называется InsurancePolicy с определен первичный ключ.This example assumes that there is an existing table called InsurancePolicy with a primary key defined. В этом примере заполняются только что созданный столбцы периода для системы управления версиями, используйте значения по умолчанию для времени начала и окончания, поскольку эти значения не может иметь значение null.This example populates the newly created period columns for system versioning using default values for the start and end times because these values cannot be null. В этом примере предложение HIDDEN без влияния на существующие приложения, взаимодействие с текущей таблицы.This example uses the HIDDEN clause to ensure no impact on existing applications interacting with the current table. Она также использует HISTORY_RETENTION_PERIOD, доступный на База данных SQLSQL Database только.It also uses HISTORY_RETENTION_PERIOD that is available on База данных SQLSQL 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 GETUTCDATE(),   
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. Перенос существующего решения для использования системы управления версиямиMigrate An Existing Solution to Use System Versioning

Приведенный ниже показано, как для переноса системы управления версиями из решения, использующего триггеры для имитации темпоральной поддержкой.The following example shows how to migrate to system versioning from a solution that uses triggers to mimic temporal support. Пример предполагает, что имеется существующего решения, использующего ProjectTaskCurrent таблицы и ProjectTaskHistory столбцы Дата изменения и дату последнего изменения таблицы для его существующего решения, который используется для его периодов, что эти столбцы периодов не используют тип данных datetime2 и что ProjectTaskCurrent таблица имеет первичный ключ.The example assumes there is an existing solution that uses a ProjectTaskCurrent table and a ProjectTaskHistory table for its existing solution, that is uses the Changed Date and Revised Date columns for its periods, that these period columns do not use the datetime2 datatype and that the ProjectTaskCurrent table has a primary key defined.

-- Drop existing trigger  
DROP TRIGGER ProjectTaskCurrent_Trigger;  
-- Adjust the schema for current and history table  
-- Change data types for existing period columns  
ALTER TABLE ProjectTaskCurrent ALTER COLUMN [Changed Date] datetime2 NOT NULL;  
ALTER TABLE ProjectTaskCurrent 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 ProjectTaskCurrent  
ADD PERIOD FOR SYSTEM_TIME ([Changed Date], [Revised Date])  

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

В.C. Отключение и повторное включение системы управления версиями для изменения схемы таблицыDisabling and Re-Enabling System Versioning to Change Table Schema

В этом примере показано, как отключить систему управления версиями на Department таблицы, добавьте столбец и повторное включение системы управления версиями.This example shows how to disable system versioning on the Department table, add a column, and re-enable system versioning. Отключение системы управления версиями требуется, чтобы изменить схему таблицы.Disabling system versioning is required in order to modify the table schema. Выполните следующие действия в рамках транзакции для предотвращения обновлений к обеим таблицам во время обновления схемы таблицы, что позволяет администратору базы данных для пропуска проверки согласованности данных проверяет при повторном включении системы управления версиями и получить производительности преимуществ.Perform 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. Обратите внимание, что задач, таких как создание статистики, переключение секций или применения сжатия для одной или обеих таблиц не требуется отключение системы управления версиями.Note that tasks such as creating statistics, switching partitions or applying compression to one or both tables does not 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. Удаление системы управления версиямиRemoving System Versioning

В этом примере показано, как полностью удалить системы управления версиями из таблица Department и drop DepartmentHistory таблицы.This example shows how to completely remove system versioning from the Department table and drop the DepartmentHistory table. При необходимости можно также удалить столбцы периода используются системой для записи сведений о системе управления версиями.Optionally, you might also want to drop the period columns used by the system to record system versioning information. Обратите внимание, что либо не удалось удалить Department или DepartmentHistory таблицы при включенной системе управления версиями.Note that you cannot drop either the Department or the DepartmentHistory tables while system versioning is enabled.

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

Примеры: Хранилище данных SQL AzureAzure SQL Data Warehouse и Параллельное хранилище данныхParallel Data WarehouseExamples: Хранилище данных SQL AzureAzure SQL Data Warehouse and Параллельное хранилище данныхParallel Data Warehouse

Следующие примеры A, C помощью FactResellerSales в таблицу AdventureWorksPDW2012AdventureWorksPDW2012 базы данных.The following examples A through C use the FactResellerSales table in the AdventureWorksPDW2012AdventureWorksPDW2012 database.

A.A. Определение секционирования таблицыDetermining if a table is partitioned

Следующий запрос возвращает одну или несколько строк, если таблица FactResellerSales секционирована.The following query returns one or more rows if the table FactResellerSales is partitioned. Если таблица не секционирована, не возвращается ни одна строка.If the table is not 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. Определение граничных значений для секционированной таблицыDetermining boundary values for a partitioned 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. Определение столбца секционирования секционированной таблицыDetermining the partition column for a partitioned 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. Объединение двух секцийMerging two partitions

Следующий пример выполняет слияние двух секций в таблице.The following example merges two partitions on a table.

Customer Таблица имеет следующее определение: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)));  

Следующая команда объединяет границы раздела 10 и 25.The following command combines the 10 and 25 partition boundaries.

ALTER TABLE Customer MERGE RANGE (10);  

Новые таблицы, является: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. Разбиение секцииSplitting a partition

Следующий пример разделяет секции для таблицы.The following example splits a partition on a table.

Customer Таблица содержит следующие DDL: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 )));  

Следующая команда создает новый раздел ограничивается значение 75, от 50 до 100.The following command creates a new partition bound by the value 75, between 50 and 100.

ALTER TABLE Customer SPLIT RANGE (75);  

Новые таблицы, является: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. Перемещение секции в таблицу журнала с помощью КОММУТАТОРАUsing SWITCH to move a partition to a history table

Следующий пример перемещает данные в секции Orders таблицы для секции в OrdersHistory таблицы.The following example moves the data in a partition of the Orders table to a partition in the OrdersHistory table.

Orders Таблица содержит следующие DDL: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' )));  

В этом примере Orders таблица содержит следующие разделы.In this example, the Orders table has the following partitions. Каждая секция содержит данные.Each partition contains data.

СекцияPartition Содержит данные?Has data? Границы диапазонаBoundary range
11 ДаYes OrderDate < ' 2004-01-01 "OrderDate < '2004-01-01'
22 ДаYes "2004-01-01" < = OrderDate < ' 2005-01-01 "'2004-01-01' <= OrderDate < '2005-01-01'
33 ДаYes "2005-01-01" < = OrderDate < ' 2006-01-01 "'2005-01-01' <= OrderDate< '2006-01-01'
44 ДаYes "2006-01-01" < = OrderDate < ' 2007-01-01 "'2006-01-01'<= OrderDate < '2007-01-01'
55 ДаYes ' 2007-01-01 "< = OrderDate'2007-01-01' <= OrderDate
  • Секция 1 (содержит данные): OrderDate < ' 2004-01-01 "Partition 1 (has data): OrderDate < '2004-01-01'
  • Секции 2 (содержит данные): "2004-01-01" < = OrderDate < ' 2005-01-01 "Partition 2 (has data): '2004-01-01' <= OrderDate < '2005-01-01'
  • Раздел 3 (содержит данные): "2005-01-01" < = OrderDate < ' 2006-01-01 "Partition 3 (has data): '2005-01-01' <= OrderDate< '2006-01-01'
  • Раздел 4 (содержит данные): "2006-01-01" < = OrderDate < ' 2007-01-01 "Partition 4 (has data): '2006-01-01'<= OrderDate < '2007-01-01'
  • Секция 5 (содержит данные): "2007-01-01" < = OrderDatePartition 5 (has data): '2007-01-01' <= OrderDate

OrdersHistory Таблица имеет следующие DDL, которая имеет одинаковые столбцы и имена столбцов как Orders таблицы.The OrdersHistory table has the following DDL, which has identical columns and column names as the Orders table. Оба этих параметра соответствуют хэш распределенных 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' )));  

Несмотря на то, что столбцы и имена столбцов должны быть одинаковыми, границы секций не обязательно должны быть одинаковыми.Although the columns and column names must be the same, the partition boundaries do not need to be the same. В этом примере OrdersHistory таблица имеет следующие два раздела и пусты обе секции:In this example, the OrdersHistory table has the following two partitions and both partitions are empty:

  • Секция 1 (без данных): OrderDate < ' 2004-01-01 "Partition 1 (no data): OrderDate < '2004-01-01'
  • Секции 2 (пусто): "2004-01-01" < = OrderDatePartition 2 (empty): '2004-01-01' <= OrderDate

Для предыдущих двух таблиц, следующая команда перемещает все строки с OrderDate < '2004-01-01' из Orders таблицу 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;  

В результате первой секции в Orders является пустым и первую секцию в OrdersHistory содержит данные.As a result, the first partition in Orders is empty and the first partition in OrdersHistory contains data. Теперь таблицы отображаются следующим образом:The tables now appear as follows:

OrdersТаблицаOrders table

  • Секция 1 (пусто): OrderDate < ' 2004-01-01 "Partition 1 (empty): OrderDate < '2004-01-01'
  • Секции 2 (содержит данные): "2004-01-01" < = OrderDate < ' 2005-01-01 "Partition 2 (has data): '2004-01-01' <= OrderDate < '2005-01-01'
  • Раздел 3 (содержит данные): "2005-01-01" < = OrderDate < ' 2006-01-01 "Partition 3 (has data): '2005-01-01' <= OrderDate< '2006-01-01'
  • Раздел 4 (содержит данные): "2006-01-01" < = OrderDate < ' 2007-01-01 "Partition 4 (has data): '2006-01-01'<= OrderDate < '2007-01-01'
  • Секция 5 (содержит данные): "2007-01-01" < = OrderDatePartition 5 (has data): '2007-01-01' <= OrderDate

    OrdersHistoryТаблицаOrdersHistory table

  • Секция 1 (содержит данные): OrderDate < ' 2004-01-01 "Partition 1 (has data): OrderDate < '2004-01-01'

  • Секции 2 (пусто): "2004-01-01" < = OrderDatePartition 2 (empty): '2004-01-01' <= OrderDate

Чтобы очистить Orders таблицы, можно удалить пустой секции, слияние секций 1 и 2 следующим образом: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');  

После слияния Orders таблица содержит следующие разделы:After the merge, the Orders table has the following partitions:

OrdersТаблицаOrders table

  • Секция 1 (содержит данные): OrderDate < ' 2005-01-01 "Partition 1 (has data): OrderDate < '2005-01-01'
  • Секции 2 (содержит данные): "2005-01-01" < = OrderDate < ' 2006-01-01 "Partition 2 (has data): '2005-01-01' <= OrderDate< '2006-01-01'
  • Раздел 3 (содержит данные): "2006-01-01" < = OrderDate < ' 2007-01-01 "Partition 3 (has data): '2006-01-01'<= OrderDate < '2007-01-01'
  • Раздел 4 (содержит данные): "2007-01-01" < = OrderDatePartition 4 (has data): '2007-01-01' <= OrderDate

Предположим, что передает следующего года и вы готовы к архивации 2005 года.Suppose another year passes and you are ready to archive the year 2005. Можно выделить для 2005 года в пустую секцию OrdersHistory таблицу, разделив пустую секцию следующим образом: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');  

После разбиения OrdersHistory таблица содержит следующие разделы:After the split, the OrdersHistory table has the following partitions:

OrdersHistoryТаблицаOrdersHistory table

  • Секция 1 (содержит данные): OrderDate < ' 2004-01-01 "Partition 1 (has data): OrderDate < '2004-01-01'
  • Секции 2 (пусто): "2004-01-01" < "2005-01-01"Partition 2 (empty): '2004-01-01' < '2005-01-01'
  • Раздел 3 (пусто): "2005-01-01" < = OrderDatePartition 3 (empty): '2005-01-01' <= OrderDate

См. такжеSee Also

sys.tables (Transact-SQL) sys.tables (Transact-SQL)
sp_rename (Transact-SQL) sp_rename (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
DROP TABLE ( Transact-SQL ) DROP TABLE (Transact-SQL)
sp_help (Transact-SQL) sp_help (Transact-SQL)
ALTER PARTITION SCHEME ( Transact-SQL ) ALTER PARTITION SCHEME (Transact-SQL)
ALTER PARTITION FUNCTION ( Transact-SQL ) ALTER PARTITION FUNCTION (Transact-SQL)
EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)