Инструкция CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL Azure нетAzure Synapse Analytics (хранилище данных SQL) нетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Создает новую таблицу в SQL ServerSQL Server и База данных SQL AzureAzure SQL Database.Creates a new table in SQL ServerSQL Server and База данных SQL AzureAzure SQL Database.

Примечание

Синтаксис Хранилище данных SQLSQL Data Warehouse см. в статье CREATE TABLE (хранилище данных SQL Azure).For Хранилище данных SQLSQL Data Warehouse syntax, see CREATE TABLE (Azure SQL Data Warehouse).

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

Простой синтаксисSimple Syntax

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

Полный синтаксисFull Syntax

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

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

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

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

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

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

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

АргументыArguments

database_name — имя базы данных, в которой создается таблица. database_name Is the name of the database in which the table is created. Параметр database_name должен указывать имя существующей базы данных. database_name must specify the name of an existing database. Если не указано, в качестве database_name по умолчанию выбирается текущая база данных.If not specified, database_name defaults to the current database. Имя входа для текущего соединения должно быть связано с идентификатором пользователя, существующего в базе данных, указанной аргументом database_name, а этот пользователь должен обладать разрешениями CREATE TABLE.The login for the current connection must be associated with an existing user ID in the database specified by database_name, and that user ID must have CREATE TABLE permissions.

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

table_name — имя новой таблицы. table_name Is the name of the new table. Имена таблиц должны соответствовать правилам для идентификаторов.Table names must follow the rules for identifiers. Аргумент table_name может состоять не более чем из 128 символов, за исключением имен локальных временных таблиц (имена с префиксом из одного символа решетки #), длина которых не должна превышать 116 символов. table_name can be a maximum of 128 characters, except for local temporary table names (names prefixed with a single number sign (#)) that cannot exceed 116 characters.

AS FileTable Применимо к: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) и выше).AS FileTable Applies to: ( and later).

Создает новую таблицу FileTable.Creates the new table as a FileTable. Нет необходимости указывать столбцы, так как таблица FileTable имеет фиксированное схему.You do not specify columns because a FileTable has a fixed schema. Дополнительные сведения см. в статье Таблицы FileTable.For more information, see FileTables.

column_name computed_column_expression — выражение, определяющее значение вычисляемого столбца. column_name computed_column_expression Is an expression that defines the value of a computed column. Вычисляемый столбец представляет собой виртуальный столбец, физически не хранящийся в таблице, если для него не установлен признак PERSISTED.A computed column is a virtual column that is not physically stored in the table, unless the column is marked PERSISTED. Значение столбца вычисляется на основе выражения, использующего другие столбцы той же таблицы.The column is computed from an expression that uses other columns in the same table. Например, вычисляемый столбец может иметь определение cost AS price * qty. Выражение может быть именем невычисляемого столбца, константой, функцией, переменной или любой их комбинацией, соединенной одним или несколькими операторами.For example, a computed column can have the definition: cost AS price * qty. The expression can be a noncomputed column name, constant, function, variable, and any combination of these connected by one or more operators. Выражение не может быть вложенным запросом или содержать псевдонимы типов данных.The expression cannot be a subquery or contain alias data types.

Вычисляемые столбцы могут использоваться в списках выбора, предложениях WHERE, ORDER BY и в любых других местах, в которых могут использоваться обычные выражения, за исключением следующих случаев.Computed columns can be used in select lists, WHERE clauses, ORDER BY clauses, or any other locations in which regular expressions can be used, with the following exceptions:

  • Для использования в ограничениях FOREIGN KEY или CHECK вычисляемые столбцы должны быть помечены как PERSISTED.Computed columns must be marked PERSISTED to participate in a FOREIGN KEY or CHECK constraint.

  • Вычисляемый столбец может использоваться в качестве ключевого столбца в индексе или в качестве компонента какого-либо ограничения PRIMARY KEY или UNIQUE, если значение этого вычисляемого столбца определено детерминистическим выражением, а тип данных результата разрешен в столбцах индекса.A computed column can be used as a key column in an index or as part of any PRIMARY KEY or UNIQUE constraint, if the computed column value is defined by a deterministic expression and the data type of the result is allowed in index columns.

    Например, если таблица содержит целочисленные столбцы a и b, вычисляемый столбец a+b может быть включен в индекс, а вычисляемый столбец a+DATEPART(dd, GETDATE())  — не может, так как его значение может изменяться при последующих вызовах.For example, if the table has integer columns a and b, the computed column a+b may be indexed, but computed column a+DATEPART(dd, GETDATE()) cannot be indexed because the value may change in subsequent invocations.

  • Вычисляемый столбец не может быть целевым столбцом инструкций INSERT или UPDATE.A computed column cannot be the target of an INSERT or UPDATE statement.

Примечание

Каждая строка таблицы может содержать различные значения столбцов, задействованных в вычисляемом столбце; таким образом, значение вычисляемого столбца не будет одним и тем же в каждой строке.Each row in a table can have different values for columns that are involved in a computed column; therefore, the computed column may not have the same value for each row.

Компонент Компонент Database EngineDatabase Engine автоматически определяет для вычисляемых столбцов допустимость значений NULL на основе использованных выражений.Based on the expressions that are used, the nullability of computed columns is determined automatically by the Компонент Database EngineDatabase Engine. Считается, что результат большинства выражений допускает значение NULL, даже если используются только столбцы, для которых значение NULL запрещено, так как при возможном переполнении или потере точности может получаться значение NULL.The result of most expressions is considered nullable even if only nonnullable columns are present, because possible underflows or overflows also produce NULL results. Для выяснения допустимости значения NULL в вычисляемом столбце таблицы используйте функцию COLUMNPROPERTY со свойством AllowsNull.Use the COLUMNPROPERTY function with the AllowsNull property to investigate the nullability of any computed column in a table. Добиться того, чтобы выражение не допускало значения NULL, можно, указав ISNULL с константой check_expression, где константа представляет собой ненулевое значение, заменяющее любое значение NULL.An expression that is nullable can be turned into a nonnullable one by specifying ISNULL with the check_expression constant, where the constant is a nonnull value substituted for any NULL result. Для вычисляемых столбцов, основанных на выражениях, содержащих определяемые пользователем типы среды CLR, требуется разрешение REFERENCES на тип.REFERENCES permission on the type is required for computed columns based on common language runtime (CLR) user-defined type expressions.

PERSISTED — указывает, что компонент Компонент SQL Server Database EngineSQL Server Database Engine будет физически хранить вычисляемые значения в таблице и обновлять их при изменении любого столбца, от которого зависит вычисляемый столбец.PERSISTED Specifies that the Компонент SQL Server Database EngineSQL Server Database Engine will physically store the computed values in the table, and update the values when any other columns on which the computed column depends are updated. Указание PERSISTED для вычисляемого столбца позволяет создать индекс по вычисляемому столбцу, который будет детерминированным, но не точным.Marking a computed column as PERSISTED lets you create an index on a computed column that is deterministic, but not precise. Дополнительные сведения см. в разделе Индексы вычисляемых столбцов.For more information, see Indexes on Computed Columns. Все вычисляемые столбцы, используемые как столбцы секционирования в секционированной таблице, должны быть явно помечены как PERSISTED.Any computed columns that are used as partitioning columns of a partitioned table must be explicitly marked PERSISTED. Если указан параметр PERSISTED, значение computed_column_expression должно быть детерминированным. computed_column_expression must be deterministic when is specified.

ON { partition_scheme | filegroup | "default" } Указывает схему секционирования или файловую группу, в которой хранится таблица.ON { partition_scheme filegroup "default" } Specifies the partition scheme or filegroup on which the table is stored. Если аргумент partition_scheme указан, таблица будет разбита на секции, хранимые в одной или нескольких файловых группах, указанных аргументом partition_scheme.If partition_scheme is specified, the table is to be a partitioned table whose partitions are stored on a set of one or more filegroups specified in partition_scheme. Если указан аргумент filegroup, таблица сохраняется в файловой группе с таким именем.If filegroup is specified, the table is stored in the named filegroup. Это должна быть существующая файловая группа в базе данных.The filegroup must exist within the database. Если указано значение "default" или параметр ON не определен вообще, таблица сохраняется в файловой группе по умолчанию.If "default" is specified, or if ON is not specified at all, the table is stored on the default filegroup. Механизм хранения таблицы, указанный в инструкции CREATE TABLE, изменить в дальнейшем невозможно.The storage mechanism of a table as specified in CREATE TABLE cannot be subsequently altered.

Параметр ON {partition_scheme | filegroup | "default" } может также указываться в ограничении PRIMARY KEY или UNIQUE.ON {partition_scheme filegroup "default"} can also be specified in a PRIMARY KEY or UNIQUE constraint. С помощью этих ограничений создаются индексы.These constraints create indexes. Если указан аргумент filegroup, индекс сохраняется в файловой группе с таким именем.If filegroup is specified, the index is stored in the named filegroup. Если указано значение "default" или параметр ON не определен вообще, индекс сохраняется в той же файловой группе, что и таблица.If "default" is specified, or if ON is not specified at all, the index is stored in the same filegroup as the table. Если ограничение PRIMARY KEY или UNIQUE создает кластеризованный индекс, страницы данных таблицы сохраняются в той же файловой группе, что и индекс.If the PRIMARY KEY or UNIQUE constraint creates a clustered index, the data pages for the table are stored in the same filegroup as the index. Если ограничение создает кластеризованный индекс (с помощью параметра CLUSTERED или другим способом), а указанный аргумент partition_scheme отличается от аргументов partition_scheme и filegroup из определения таблицы либо наоборот, принимается во внимание только определение ограничения, а все остальное не учитывается.If CLUSTERED is specified or the constraint otherwise creates a clustered index, and a partition_scheme is specified that differs from the partition_scheme or filegroup of the table definition, or vice-versa, only the constraint definition will be honored, and the other will be ignored.

Примечание

В этом контексте default не является ключевым словом.In this context, default is not a keyword. Это идентификатор файловой группы по умолчанию, который должен иметь разделители, как в выражениях ON "default" или ON [ default ] .It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [default]. Если указано значение "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.For more information, see SET QUOTED_IDENTIFIER.

После создания секционированной таблицы рекомендуется присвоить параметру LOCK_ESCALATION для таблицы значения AUTO.After you create a partitioned table, consider setting the LOCK_ESCALATION option for the table to AUTO. При этом можно усовершенствовать параллелизм, разрешив укрупнение блокировок до уровня секции (HoBT) вместо таблицы.This can improve concurrency by enabling locks to escalate to partition (HoBT) level instead of the table. Дополнительные сведения см. в разделе ALTER TABLE.For more information, see ALTER TABLE.

TEXTIMAGE_ON { filegroup| "default" } Указывает, что столбцы с типами text, ntext, image, xml, varchar(max) , nvarchar(max) , varbinary(max) и с определяемыми пользователем типами данных CLR (включая geometry и geography) хранятся в указанной файловой группе.TEXTIMAGE_ON { filegroup "default" } Indicates that the text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max), and CLR user-defined type columns (including geometry and geography) are stored on the specified filegroup.

Параметр TEXTIMAGE_ON недопустим, если в таблице нет столбцов с большими значениями.TEXTIMAGE_ON is not allowed if there are no large value columns in the table. Нельзя указывать параметр TEXTIMAGE_ON одновременно с параметром partition_scheme. cannot be specified if partition_scheme is specified. Если указано значение "default" или параметр TEXTIMAGE_ON не определен вообще, столбцы с большими значениями сохраняются в файловой группе по умолчанию.If "default" is specified, or if TEXTIMAGE_ON is not specified at all, the large value columns are stored in the default filegroup. Способ хранения любых данных столбцов с большими значениями, определенный инструкцией CREATE TABLE, изменить в дальнейшем невозможно.The storage of any large value column data specified in CREATE TABLE cannot be subsequently altered.

Примечание

Varchar(max), nvarchar(max), varbinary(max), xml и большие значения UDT хранятся прямо в строке данных до предельного размера в 8000 байт и пока значение умещается в записи.Varchar(max), nvarchar(max), varbinary(max), xml and large UDT values are stored directly in the data row, up to a limit of 8,000 bytes and as long as the value can fit the record. Если значение не умещается в записи, то указатель хранится в строке, а все остальное хранится вне строки в области хранения объектов LOB.If the value does not fit in the record, a pointer is sorted in-row and the rest is stored out of row in the LOB storage space. 0 — это значение по умолчанию, указывающее, что все значения сохраняются прямо в строке данных.0 is the default value, which indicates that all values are stored directly in the data row.

Параметр TEXTIMAGE_ON изменяет только расположение "пространства хранения объектов LOB", но не влияет на данные, хранящиеся в строке.TEXTIMAGE_ON only changes the location of the "LOB storage space", it does not affect when data is stored in-row. Используйте параметр LARGE VALUE TYPES OUT OF ROW в sp_tableoption, чтобы хранить все значения LOB за пределами строки.Use large value types out of row option of sp_tableoption to store the entire LOB value out of the row.

В этом контексте default не является ключевым словом.In this context, default is not a keyword. Это идентификатор файловой группы по умолчанию, который должен иметь разделители, как в выражении TEXTIMAGE_ON "default" или TEXTIMAGE_ON [default].It is an identifier for the default filegroup and must be delimited, as in TEXTIMAGE_ON "default" or TEXTIMAGE_ON [default]. Если указано значение "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.For more information, see SET QUOTED_IDENTIFIER.

FILESTREAM_ON { partition_scheme_name | filegroup | " default " } Применимо к: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 и более поздних версий).FILESTREAM_ON { partition_scheme_name | filegroup | " default " } Applies to: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 and later). База данных SQL AzureAzure SQL Database не поддерживает FILESTREAM.does not support FILESTREAM.

Задает файловую группу для данных FILESTREAM.Specifies the filegroup for FILESTREAM data.

Если таблица содержит данные FILESTREAM и является секционированной, необходимо включить предложение FILESTREAM_ON и указать схему секционирования файловых групп файлового потока.If the table contains FILESTREAM data and the table is partitioned, the FILESTREAM_ON clause must be included and must specify a partition scheme of FILESTREAM filegroups. В этой схеме секционирования должны использоваться те же функции и столбцы секционирования, что и в схеме секционирования для таблицы; в противном случае возникает ошибка.This partition scheme must use the same partition function and partition columns as the partition scheme for the table; otherwise, an error is raised.

Если таблица не секционирована, столбец FILESTREAM не может быть секционирован.If the table is not partitioned, the FILESTREAM column cannot be partitioned. Данные FILESTREAM для таблицы должны храниться в отдельной файловой группе.FILESTREAM data for the table must be stored in a single filegroup. Эта файловая группа указывается в предложении FILESTREAM_ON.This filegroup is specified in the FILESTREAM_ON clause.

Если таблица не является секционированной и предложение FILESTREAM_ON не указано, используется файловая группа FILESTREAM, для которой задано свойство DEFAULT.If the table is not partitioned and the FILESTREAM_ON clause is not specified, the FILESTREAM filegroup that has the DEFAULT property set is used. При отсутствии файловой группы FILESTREAM возникает ошибка.If there is no FILESTREAM filegroup, an error is raised.

Как и в случае с предложениями ON и TEXTIMAGE_ON, значение, указанное с помощью инструкции CREATE TABLE для предложения FILESTREAM_ON, не может быть изменено, за исключением описанных ниже ситуаций.As with ON and TEXTIMAGE_ON, the value set by using CREATE TABLE for FILESTREAM_ON cannot be changed, except in the following cases:

  • Инструкция CREATE INDEX преобразует кучу в кластеризованный индекс.A CREATE INDEX statement converts a heap into a clustered index. В этом случае можно указать другую файловую группу FILESTREAM, схему секционирования или значение NULL.In this case, a different FILESTREAM filegroup, partition scheme, or NULL can be specified.
  • Инструкция DROP INDEX преобразует кластеризованный индекс в кучу.A DROP INDEX statement converts a clustered index into a heap. В этом случае можно указать другую файловую группу FILESTREAM, схему секционирования или значение "default" .In this case, a different FILESTREAM filegroup, partition scheme, or "default" can be specified.

Для файловой группы в предложении FILESTREAM_ON <filegroup> либо для каждой файловой группы FILESTREAM, упомянутой в схеме секционирования, должен быть определен файл.The filegroup in the FILESTREAM_ON <filegroup> clause, or each FILESTREAM filegroup that is named in the partition scheme, must have one file defined for the filegroup. Этот файл должен быть определен с помощью инструкцииCREATE DATABASE или ALTER DATABASE, иначе возникает ошибка.This file must be defined by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

Дополнительные сведения о FILESTREAM см. в этой статье.For related FILESTREAM topics, see Binary Large Object - Blob Data.

[ type_schema_name .[ type_schema_name. ] type_name — указывает тип данных столбца и схему, к которой он принадлежит.] type_name Specifies the data type of the column, and the schema to which it belongs. Дисковые таблицы могут иметь один из следующих типов данных:For disk-based tables, the data type can be one of the following:

  • Системный тип данных.A system data type
  • Псевдонимы типа на основе системного типа данных SQL ServerSQL Server.An alias 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. Состояние признака NULL или NOT NULL для псевдонима типа данных можно переопределить с помощью инструкции CREATE TABLE.The NULL or NOT NULL assignment for an alias data type can be overridden during the CREATE TABLE statement. Однако его длину изменить нельзя; длина типа данных-псевдонима не определяется инструкцией CREATE TABLE.However, the length specification cannot be changed; the length for an alias data type cannot be specified in a CREATE TABLE statement.
  • Определяемый пользователем тип данных CLR.A CLR user-defined type. Прежде чем определяемые пользователем типы данных CLR можно будет использовать в определении таблицы, их нужно создать с помощью инструкции CREATE TYPE.CLR user-defined types are created with the CREATE TYPE statement before they can be used in a table definition. Для создания столбца с определяемым пользователем типом данных CLR требуется разрешение REFERENCES на этот тип.To create a column on CLR user-defined type, REFERENCES permission is required on the type.

Если аргумент type_schema_name не указан, компонент Компонент SQL Server Database EngineSQL Server Database Engine ссылается на аргумент type_name в следующем порядке:If type_schema_name is not specified, the Компонент SQL Server Database EngineSQL Server Database Engine references type_name in the following order:

  • системный тип данных SQL ServerSQL Server;The SQL ServerSQL Server system data type.
  • в установленной по умолчанию для текущего пользователя схеме в текущей базе данных;The default schema of the current user in the current database.
  • Схема dbo в текущей базе данных.The dbo schema in the current database.

Список системных типов данных, поддерживаемых оптимизированными для памяти таблицами, см. в разделе Поддерживаемые типы данных для выполняющейся в памяти OLTP.For memory-optimized tables, see Supported Data Types for In-Memory OLTP for a list of supported system types.

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

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

max — применяется только к типам данных varchar, nvarchar и varbinary для хранения 2^31 байт символьных и двоичных данных или 2^30 байт данных в Юникоде. max Applies only to the varchar, nvarchar, and varbinary data types for storing 2^31 bytes of character and binary data, and 2^30 bytes of Unicode data.

CONTENT — определяет, что каждый экземпляр типа данных xml в column_name может включать в себя несколько элементов верхнего уровня.CONTENT Specifies that each instance of the xml data type in column_name can contain multiple top-level elements. Аргумент CONTENT применим только к данным типа xml и может быть указан только в том случае, если одновременно указан аргумент xml_schema_collection.CONTENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified. Если этот параметр не указан, CONTENT принимается в качестве поведения по умолчанию.If not specified, CONTENT is the default behavior.

DOCUMENT — определяет, что каждый экземпляр типа данных xml в column_name может включать в себя только один элемент верхнего уровня.DOCUMENT Specifies that each instance of the xml data type in column_name can contain only one top-level element. Аргумент DOCUMENT применим только к данным типа xml и может быть указан только в том случае, если одновременно указан аргумент xml_schema_collection.DOCUMENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified.

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

DEFAULT — указывает значение, присваиваемое столбцу, если значение явно не задано при вставке.DEFAULT Specifies the value provided for the column when a value is not explicitly supplied during an insert. Определения DEFAULT могут применяться к любым столбцам, кроме имеющих тип timestamp или обладающих свойством IDENTITY.DEFAULT definitions can be applied to any columns except those defined as timestamp, or those with the IDENTITY property. Если значение по умолчанию указывается для столбца определяемого пользователем типа, этот тип должен поддерживать неявное преобразование выражения constant_expression в определяемый пользователем тип.If a default value is specified for a user-defined type column, the type should support an implicit conversion from constant_expression to the user-defined type. Определения DEFAULT удаляются, когда таблица удаляется из памяти.DEFAULT definitions are removed when the table is dropped. В качестве значения по умолчанию могут использоваться только константы (например, символьные строки), скалярные функции (системные, определяемые пользователем или функции CLR) или значение NULL.Only a constant value, such as a character string; a scalar function (either a system, user-defined, or CLR function); or NULL can be used as a default. Для сохранения совместимости с более ранними версиями сервера SQL ServerSQL Server значению DEFAULT может быть присвоено имя ограничения.To maintain compatibility with earlier versions of SQL ServerSQL Server, a constraint name can be assigned to a DEFAULT.

constant_expression — константа, значение NULL или системная функция, используемая в качестве значения столбца по умолчанию. constant_expression Is a constant, NULL, or a system function that is used as the default value for the column.

memory_optimized_constant_expression — константа, значение NULL или системная функция, которая поддерживается в качестве значения столбца по умолчанию. memory_optimized_constant_expression Is a constant, NULL, or a system function that is supported in used as the default value for the column. Должно поддерживаться для хранимых процедур, скомпилированных в собственном коде.Must be supported in natively compiled stored procedures. Дополнительные сведения о встроенных функциях в хранимых процедурах, компилируемых в собственном коде, см. в разделе Поддерживаемые функции для модулей, скомпилированных в собственном коде T-SQL.For more information about built-in functions in natively compiled stored procedures, see Supported Features for Natively Compiled T-SQL Modules.

IDENTITY — указывает, что новый столбец является столбцом идентификаторов.IDENTITY Indicates that the new column is an identity column. При добавлении в таблицу новой строки компонент Компонент Database EngineDatabase Engine формирует для этого столбца уникальное последовательное значение.When a new row is added to the table, the Компонент Database EngineDatabase Engine provides a unique, incremental value for the column. Столбцы идентификаторов обычно используются с ограничением PRIMARY KEY для поддержания уникальности идентификаторов строк в таблице.Identity columns are typically used with PRIMARY KEY constraints to serve as the unique row identifier for the table. Свойство IDENTITY может назначаться столбцам типа tinyint, smallint, int, bigint, decimal(p,0) или numeric(p,0) .The IDENTITY property can be assigned to tinyint, smallint, int, bigint, decimal(p,0), or numeric(p,0) columns. Для каждой таблицы можно создать только один столбец идентификаторов.Only one identity column can be created per table. Ограниченные значения по умолчанию и ограничения DEFAULT не могут использоваться в столбце идентификаторов.Bound defaults and DEFAULT constraints cannot be used with an identity column. Необходимо указать как начальное значение, так и приращение, или же не указывать ничего.Both the seed and increment or neither must be specified. Если ничего не указано, применяется значение по умолчанию (1,1).If neither is specified, the default is (1,1).

seed — значение, которое будет использовано для первой загруженной в таблицу строки. seed Is the value used for the very first row loaded into the table.

increment — значение приращения, добавляемое к значению идентификатора предыдущей загруженной строки. increment Is the incremental value added to the identity value of the previous row loaded.

NOT FOR REPLICATION В инструкции CREATE TABLE предложение NOT FOR REPLICATION может указываться для свойства IDENTITY, а также ограничений FOREIGN KEY и CHECK.NOT FOR REPLICATION In the CREATE TABLE statement, the NOT FOR REPLICATION clause can be specified for the IDENTITY property, FOREIGN KEY constraints, and CHECK constraints. Если это предложение указано для свойства IDENTITY, значения в столбцах идентификаторов не приращиваются, если вставку выполняют агенты репликации.If this clause is specified for the IDENTITY property, values are not incremented in identity columns when replication agents perform inserts. Если ограничение сопровождается этим предложением, оно не выполняется, когда агенты репликации выполняют операции вставки, обновления или удаления.If this clause is specified for a constraint, the constraint is not enforced when replication agents perform insert, update, or delete operations.

GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] [ NOT NULL ] Применимо к: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздних версий) и База данных SQL AzureAzure SQL Database.GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] [ NOT NULL ]

Определяет, что указанный столбец типа datetime2 будет использоваться системой для записи времени начала или окончания действия записи.Specifies that a specified datetime2 column will be used by the system to record either the start time for which a record is valid or the end time for which a record is valid. Столбец должен быть определен как NOT NULL.The column must be defined as NOT NULL. Если вы попытаетесь указать NULL, система выдаст ошибку.If you attempt to specify them as NULL, the system will throw an error. Если вы явно не укажете NOT NULL для столбца периода, система определит столбец как NOT NULL по умолчанию.If you do not explicitly specify NOT NULL for a period column, the system will define the column as NOT NULL by default. Используйте этот аргумент в сочетании с аргументами PERIOD FOR SYSTEM_TIME и WITH SYSTEM_VERSIONING = ON, чтобы выключить системное управление версиями в таблице.Use this argument in conjunction with the PERIOD FOR SYSTEM_TIME and WITH SYSTEM_VERSIONING = ON arguments to enable system versioning on a table. Дополнительные сведения см. в разделе Temporal Tables.For more information, see Temporal Tables.

Вы можете пометить один или оба столбца периода флагом HIDDEN, чтобы эти столбцы были скрыты и инструкция SELECT * FROM <table> не возвращала значения этих столбцов.You can mark one or both period columns with HIDDEN flag to implicitly hide these columns such that SELECT * FROM<table> does not return a value for those columns. По умолчанию столбцы периода не скрыты.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. Чтобы изменить атрибут HIDDEN для существующего столбца периода, необходимо отбросить атрибут PERIOD и заново создать его с другим флагом HIDDEN.To change the HIDDEN attribute for an existing period column, PERIOD must be dropped and recreated with a different hidden flag.

INDEX index_name [ CLUSTERED | NONCLUSTERED ] (column_name [ ASC | DESC ] [ ,... n ] ) Применимо к: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) и более поздних версий) и База данных SQL AzureAzure SQL Database.INDEX index_name [ CLUSTERED | NONCLUSTERED ] (column_name [ ASC | DESC ] [ ,... n ] ) Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later) and База данных SQL AzureAzure SQL Database.

Задает создание индекса для таблицы.Specifies to create an index on the table. Это может быть кластеризованный или некластеризованный индекс.This can be a clustered index, or a nonclustered index. Индекс будет содержать указанные столбцы и сортировать данные по возрастанию или убыванию.The index will contain the columns listed, and will sort the data in either ascending or descending order.

INDEX index_name CLUSTERED COLUMNSTORE Применимо к: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) и более поздних версий) и База данных SQL AzureAzure SQL Database.INDEX index_name CLUSTERED COLUMNSTORE Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later) and База данных SQL AzureAzure SQL Database.

Задает сохранение всей таблицы в виде столбцов с кластеризованным индексом columnstore.Specifies to store the entire table in columnar format with a clustered columnstore index. Сюда всегда входят все столбцы в таблице.This always includes all columns in the table. Данные не сортируются в алфавитном или числовом порядке, поскольку организация строк позволяет использовать преимущества сжатия columnstore.The data is not sorted in alphabetical or numeric order since the rows are organized to gain columnstore compression benefits.

INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] ) Применимо к: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) и более поздних версий) и База данных SQL AzureAzure SQL Database.INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] ) Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later) and База данных SQL AzureAzure SQL Database.

Задает создание некластеризованного индекса columnstore в таблице.Specifies to create a nonclustered columnstore index on the table. Базовая таблица может быть кучей rowstore или кластеризованным индексом или кластеризованным индексом columnstore.The underlying table can be a rowstore heap or clustered index, or it can be a clustered columnstore index. В любом случае при создании некластеризованного индекса columnstore в таблице сохраняется вторая копия данных для столбцов в индексе.In all cases, creating a nonclustered columnstore index on a table stores a second copy of the data for the columns in the index.

Некластеризованный индекс columnstore хранится и управляется как кластеризованный индекс columnstore.The nonclustered columnstore index is stored and managed as a clustered columnstore index. Он называется некластеризованным индексом columnstore, потому что столбцы могут быть ограничены и он существует как дополнительный индекс в таблице.It is called a nonclustered columnstore index to because the columns can be limited and it exists as a secondary index on a table.

ON partition_scheme_name ( column_name )  — задает схему секционирования, которая определяет файловые группы, соответствующие секциям секционированного индекса.ON partition_scheme_name(column_name) Specifies the partition scheme that defines the filegroups onto which the partitions of a partitioned index will be mapped. Схема секционирования должна быть создана в базе данных путем выполнения инструкции CREATE PARTITION SCHEME или ALTER PARTITION SCHEME.The partition scheme must exist within the database by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. column_name указывает столбец, по которому будет секционирован индекс. column_name specifies the column against which a partitioned index will be partitioned. Столбец должен соответствовать по типу данных, длине и точности аргументу функции секционирования, используемой аргументом partition_scheme_name.This column must match the data type, length, and precision of the argument of the partition function that partition_scheme_name is using. Аргумент column_name необязательно должен соответствовать столбцам из определения индекса. column_name is not restricted to the columns in the index definition. Можно указать любой столбец базовой таблицы, за исключением случая секционирования индекса UNIQUE, когда аргумент column_name должен быть выбран из используемых в качестве уникального ключа.Any column in the base table can be specified, except when partitioning a UNIQUE index, column_name must be chosen from among those used as the unique key. Это ограничение дает возможность компоненту Компонент Database EngineDatabase Engine проверять уникальность значений ключа только в одной секции.This restriction allows the Компонент Database EngineDatabase Engine to verify uniqueness of key values within a single partition only.

Примечание

При секционировании неуникального кластеризованного индекса компонент Компонент Database EngineDatabase Engine по умолчанию добавляет столбец секционирования в список ключей кластеризованного индекса, если этого столбца еще нет в списке.When you partition a non-unique, clustered index, the Компонент Database EngineDatabase Engine by default adds the partitioning column to the list of clustered index keys, if it is not already specified. При секционировании неуникального некластеризованного индекса компонент Компонент Database EngineDatabase Engine добавляет столбец секционирования как неключевой (включенный) столбец индекса, если этого столбца еще нет в списке.When partitioning a non-unique, nonclustered index, the Компонент Database EngineDatabase Engine adds the partitioning column as a non-key (included) column of the index, if it is not already specified.

Если аргумент partition_scheme_name или filegroup не задан и таблица секционирована, индекс помещается в ту же схему секционирования и с тем же столбцом секционирования, что и для базовой таблицы.If partition_scheme_name or filegroup is not specified and the table is partitioned, the index is placed in the same partition scheme, using the same partitioning column, as the underlying table.

Примечание

Для XML-индекса задать схему секционирования невозможно.You cannot specify a partitioning scheme on an XML index. Если базовая таблица секционирована, XML-индекс использует ту же схему секционирования, что и таблица.If the base table is partitioned, the XML index uses the same partition scheme as the table.

Дополнительные сведения об индексах секционирования см. в разделе Секционированные таблицы и индексы.For more information about partitioning indexes, Partitioned Tables and Indexes.

ON filegroup_name — позволяет создать заданный индекс в указанной файловой группе.ON filegroup_name Creates the specified index on the specified filegroup. Если местоположение не указано и таблица или представление не секционированы, индекс использует ту же файловую группу, что и базовая таблица или базовое представление.If no location is specified and the table or view is not partitioned, the index uses the same filegroup as the underlying table or view. Файловая группа должна существовать.The filegroup must already exist.

ON "default"  — позволяет создать заданный индекс в файловой группе, используемой по умолчанию.ON "default" Creates the specified index on the default filegroup.

Слово "default" в этом контексте не является ключевым.The term default, in this context, is not a keyword. Это идентификатор файловой группы по умолчанию, который должен иметь разделители, как в выражениях ON "default" или ON [default] .It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [default]. Если указано значение "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.For more information, see SET QUOTED_IDENTIFIER.

[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ] Применимо к: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 и более поздних версий).[ FILESTREAM_ON { filestream_filegroup_name partition_scheme_name | "NULL" } ] Applies to: through .

Указывает размещение данных FILESTREAM для таблицы при создании кластеризованного индекса.Specifies the placement of FILESTREAM data for the table when a clustered index is created. Предложение FILESTREAM_ON позволяет перемещать данные FILESTREAM в другую файловую группу FILESTREAM или схему секционирования.The FILESTREAM_ON clause allows FILESTREAM data to be moved to a different FILESTREAM filegroup or partition scheme.

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

Если таблица секционирована, должно быть включено предложение FILESTREAM_ON и указана схема секционирования файловых групп FILESTREAM, использующая ту же функцию и те же столбцы секционирования, что и схема секционирования для таблицы.If the table is partitioned, the FILESTREAM_ON clause must be included and must specify a partition scheme of FILESTREAM filegroups that uses the same partition function and partition columns as the partition scheme for the table. В противном случае произойдет ошибка.Otherwise, an error is raised.

Если таблица не секционирована, столбец FILESTREAM не может быть секционирован.If the table is not partitioned, the FILESTREAM column cannot be partitioned. Данные FILESTREAM для этой таблицы необходимо хранить в отдельной файловой группе, указанной в предложении FILESTREAM_ON.FILESTREAM data for the table must be stored in a single filegroup that is specified in the FILESTREAM_ON clause.

Предложение FILESTREAM_ON NULL можно указать в инструкции CREATE INDEX, если создается кластеризованный индекс и таблица не содержит столбец FILESTREAM.FILESTREAM_ON NULL can be specified in a CREATE INDEX statement if a clustered index is being created and the table does not contain a FILESTREAM column.

Дополнительные сведения см. в статье FILESTREAM (SQL Server).For more information, see FILESTREAM.

ROWGUIDCOL — указывает, что новый столбец является столбцом идентификатора GUID строки.ROWGUIDCOL Indicates that the new column is a row GUID column. Только один столбец типа uniqueidentifier в таблице может быть назначен в качестве столбца ROWGUIDCOL.Only one uniqueidentifier column per table can be designated as the ROWGUIDCOL column. Применение свойства ROWGUIDCOL позволяет ссылаться на столбец с помощью ключевого слова $ROWGUID.Applying the ROWGUIDCOL property enables the column to be referenced using $ROWGUID. Свойство ROWGUIDCOL может быть присвоено только столбцу типа uniqueidentifier.The ROWGUIDCOL property can be assigned only to a uniqueidentifier column. Ключевым словом ROWGUIDCOL нельзя обозначать столбцы определяемых пользователем типов данных.User-defined data type columns cannot be designated with ROWGUIDCOL.

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

ENCRYPTED WITH — указывает столбцы шифрования с помощью функции Always Encrypted.ENCRYPTED WITH Specifies encrypting columns by using the Always Encrypted feature.

COLUMN_ENCRYPTION_KEY = key_name — указывает ключ шифрования столбца.COLUMN_ENCRYPTION_KEY = key_name Specifies the column encryption key. Дополнительные сведения см. в этой статье.For more information, see CREATE COLUMN ENCRYPTION KEY.

ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED } — для детерминированного шифрования используется метод, с помощью которого всегда создается одно и то же зашифрованное значение для конкретного текстового значения.ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED } Deterministic encryption uses a method which always generates the same encrypted value for any given plain text value. Это позволяет выполнять поиск с помощью сравнения на равенство, группирование и объединение таблиц по зашифрованным значениям. При этом несанкционированные пользователи могут определять некоторую информацию о зашифрованных значениях путем анализа повторов в зашифрованном столбце.Using deterministic encryption allows searching using equality comparison, grouping, and joining tables using equality joins based on encrypted values, but can also allow unauthorized users to guess information about encrypted values by examining patterns in the encrypted column. Соединить две таблицы по столбцам с детерминированным шифрованием можно только в том случае, если оба столбца шифруются с помощью одного ключа шифрования столбца.Joining two tables on columns encrypted deterministically is only possible if both columns are encrypted using the same column encryption key. При использовании детерминированного шифрования необходимо указать порядок сортировки binary2 в параметрах сортировки для символьных столбцов.Deterministic encryption must use a column collation with a binary2 sort order for character columns.

Случайное шифрование использует метод, который шифрует данные менее предсказуемым образом. Randomized encryption uses a method that encrypts data in a less predictable manner. Случайное шифрование более безопасное, но не предусматривает вычисления и индексацию в зашифрованных столбцах, если экземпляр SQL Server не поддерживает функцию Always Encrypted с безопасными анклавами.Randomized encryption is more secure, but it prevents any computations and indexing on encrypted columns, unless your SQL Server instance supports Always Encrypted with secure enclaves. См. сведения о функции Always Encrypted с безопасными анклавами.Please see Always Encrypted with secure enclaves for details.

Если вы используете функцию Always Encrypted (без безопасных анклавов), к столбцам, поиск которых осуществляется на основе параметров или параметров группирования, например номер внутреннего паспорта, следует применять детерминированное шифрование.If you are using Always Encrypted (without secure enclaves), use deterministic encryption for columns that will be searched with parameters or grouping parameters, for example a government ID number. Используйте случайное шифрование для таких данных, как номер кредитной карты, которые не группируются с другими записями, не используются для соединения таблиц и не могут быть параметром поиска, так как для поиска нужной строки с зашифрованным столбцом используются другие столбцы (например, номер транзакции).Use randomized encryption, for data such as a credit card number, which is not grouped with other records or used to join tables, and which is not searched for because you use other columns (such as a transaction number) to find the row which contains the encrypted column of interest.

При использовании функции Always Encrypted с безопасными анклавами советуем использовать случайное шифрование.If you are using Always Encrypted with secure enclaves, randomized encryption is a recommended encryption type.

Столбцы должны иметь подходящий тип данных.Columns must be of a qualifying data type.

ALGORITHM Применимо к: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздних версий).ALGORITHM Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) and later).

Должно быть 'AEAD_AES_256_CBC_HMAC_SHA_256' .Must be 'AEAD_AES_256_CBC_HMAC_SHA_256'.

Дополнительные сведения о функции Always Encrypted, в том числе об ограничениях, см. в этой статье.For more information including feature constraints, see Always Encrypted.

SPARSE — указывает, что столбец является разреженным столбцом.SPARSE 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. Дополнительные ограничения и сведения о разреженных столбцах см. в разделе Разреженные столбцы.For additional restrictions and more information about sparse columns, see Use Sparse Columns.

MASKED WITH ( FUNCTION = ' mask_function ') Применимо к: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздних версий).MASKED WITH ( FUNCTION = ' mask_function ') Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) and later).

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

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

Параметры функции см. в разделе Динамическое маскирование данных.For function parameters, see Dynamic Data Masking.

FILESTREAM Применимо к: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 и более поздних версий)FILESTREAM Applies to: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 and later)

Допустимо только для столбцов типа varbinary(max) .Valid only for varbinary(max) columns. Указывает хранилище FILESTREAM для данных больших двоичных объектов типа varbinary(max) .Specifies FILESTREAM storage for the varbinary(max) BLOB data.

Таблица также должна содержать столбец данных типа uniqueidentifier с атрибутом ROWGUIDCOL.The table must also have a column of the uniqueidentifier data type that has the ROWGUIDCOL attribute. Этот столбец не должен допускать значений NULL и должен иметь относящееся к одному столбцу ограничение UNIQUE или PRIMARY KEY.This column must not allow null values and must have either a UNIQUE or PRIMARY KEY single-column constraint. Значение идентификатора GUID для столбца должно быть предоставлено приложением во время вставки данных или ограничением DEFAULT, в котором используется функция NEWID ().The GUID value for the column must be supplied either by an application when inserting data, or by a DEFAULT constraint that uses the NEWID () function.

Столбец ROWGUIDCOL нельзя удалить, а связанные ограничения нельзя изменить, если в таблице определен столбец FILESTREAM.The ROWGUIDCOL column cannot be dropped and the related constraints cannot be changed while there is a FILESTREAM column defined for the table. Столбец ROWGUIDCOL можно удалить только после удаления последнего столбца FILESTREAM.The ROWGUIDCOL column can be dropped only after the last FILESTREAM column is dropped.

Если для столбца задан атрибут хранилища FILESTREAM, то все значения для этого столбца хранятся в контейнере данных FILESTREAM в файловой системе.When the FILESTREAM storage attribute is specified for a column, all values for that column are stored in a FILESTREAM data container on the file system.

COLLATE collation_name — задает параметры сортировки для столбца.COLLATE collation_name Specifies the collation for the column. Могут использоваться параметры сортировки Windows или параметры сортировки SQL.Collation name can be either a Windows collation name or an SQL collation name. Аргумент collation_name применим только к столбцам типа char, varchar, text, nchar, nvarchar и ntext. collation_name is applicable only for columns of the char, varchar, text, nchar, nvarchar, and ntext data types. Если этот аргумент не указан, столбцу назначаются либо параметры сортировки определяемого пользователем типа, если столбец принадлежит к определяемому пользователем типу данных, либо установленные по умолчанию параметры сортировки для базы данных.If not specified, the column is assigned either the collation of the user-defined data type, if the column is of a user-defined data type, or the default collation of the database.

Дополнительные сведения об именах параметров сортировки Windows и SQL см. в разделах Имя параметров сортировки Windows и Имя параметров сортировки SQL.For more information about the Windows and SQL collation names, see Windows Collation Name and SQL Collation Name.

Дополнительные сведения см. в описании COLLATE.For more information, see COLLATE.

CONSTRAINT — необязательное ключевое слово, указывающее на начало определения для ограничения PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY или CHECK.CONSTRAINT Is an optional keyword that indicates the start of the definition of a PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY, or CHECK constraint.

constraint_name — имя ограничения. constraint_name Is the name of a constraint. Имена ограничений должны быть уникальными в пределах схемы, к которой принадлежит таблица.Constraint names must be unique within the schema to which the table belongs.

NULL | NOT NULL — определяет, допустимы ли для столбца значения NULL.NULL | NOT NULL Determine whether null values are allowed in the column. Параметр NULL не является ограничением в строгом смысле слова, но может быть указан так же, как и NOT NULL.NULL is not strictly a constraint but can be specified just like NOT NULL. Ограничение NOT NULL может быть указано для вычисляемых столбцов только в случае, если одновременно указан параметр PERSISTED.NOT NULL can be specified for computed columns only if PERSISTED is also specified.

PRIMARY KEY — ограничение, которое обеспечивает целостность сущностей для указанного столбца или столбцов с помощью уникального индекса.PRIMARY KEY Is a constraint that enforces entity integrity for a specified column or columns through a unique index. Можно создать только одно ограничение PRIMARY KEY для таблицы.Only one PRIMARY KEY constraint can be created per table.

UNIQUE — ограничение, которое обеспечивает целостность сущностей для указанного столбца или столбцов с помощью уникального индекса.UNIQUE Is a constraint that provides entity integrity for a specified column or columns through a unique index. В таблице может быть несколько ограничений UNIQUE.A table can have multiple UNIQUE constraints.

CLUSTERED | NONCLUSTERED — указывает, что для ограничения PRIMARY KEY или UNIQUE создается кластеризованный или некластеризованный индекс.CLUSTERED | NONCLUSTERED Indicate that a clustered or a nonclustered index is created for the PRIMARY KEY or UNIQUE constraint. Для ограничений PRIMARY KEY по умолчанию создается кластеризованный индекс (CLUSTERED), а для ограничений UNIQUE — некластеризованный (NONCLUSTERED).PRIMARY KEY constraints default to CLUSTERED, and UNIQUE constraints default to NONCLUSTERED.

В инструкции CREATE TABLE параметр CLUSTERED можно задать только для одного ограничения.In a CREATE TABLE statement, CLUSTERED can be specified for only one constraint. Если для ограничения UNIQUE указан параметр CLUSTERED, и, кроме того, указано ограничение PRIMARY KEY, то для PRIMARY KEY применяется по умолчанию значение NONCLUSTERED.If CLUSTERED is specified for a UNIQUE constraint and a PRIMARY KEY constraint is also specified, the PRIMARY KEY defaults to NONCLUSTERED.

FOREIGN KEY REFERENCES — ограничение, которое обеспечивает ссылочную целостность данных в этом столбце или столбцах.FOREIGN KEY REFERENCES Is a constraint that provides referential integrity for the data in the column or columns. Ограничения FOREIGN KEY требуют, чтобы каждое значение в столбце существовало в соответствующем связанном столбце или столбцах в связанной таблице.FOREIGN KEY constraints require that each value in the column exists in the corresponding referenced column or columns in the referenced table. Ограничения FOREIGN KEY могут ссылаться только на столбцы, являющиеся ограничениями PRIMARY KEY или UNIQUE в связанной таблице или на столбцы, на которые имеются ссылки в индексе UNIQUE INDEX связанной таблицы.FOREIGN KEY constraints can reference only columns that are PRIMARY KEY or UNIQUE constraints in the referenced table or columns referenced in a UNIQUE INDEX on the referenced table. Внешние ключи в вычисляемых столбцах должны быть также помечены как PERSISTED.Foreign keys on computed columns must also be marked PERSISTED.

[ schema_name . ] referenced_table_name] — имя таблицы, на которую ссылается ограничение FOREIGN KEY, и схема, к которой она принадлежит.[ schema_name.] referenced_table_name] Is the name of the table referenced by the FOREIGN KEY constraint, and the schema to which it belongs.

( ref_column [ , ... n ] )  — столбец или список столбцов из таблицы, на которую ссылается ограничение FOREIGN KEY. ****(**** *ref_column* [ *,*... *n* ] **)** Is a column, or list of columns, from the table referenced by the FOREIGN KEY constraint.

ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } — определяет операцию, выполняемую со строками создаваемой таблицы, если эти строки имеют ссылочную связь, а строка, на которую добавлены ссылки, удаляется из родительской таблицы.ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } Specifies what action happens to rows in the table created, if those rows have a referential relationship and the referenced row is deleted from the parent table. Параметр по умолчанию — NO ACTION.The default is NO ACTION.

NO ACTION — компонент Компонент Database EngineDatabase Engine формирует ошибку, и выполняется откат операции удаления строки из родительской таблицы.NO ACTION The Компонент Database EngineDatabase Engine raises an error and the delete action on the row in the parent table is rolled back.

CASCADE — если из родительской таблицы удаляется строка, соответствующие ей строки удаляются и из таблицы со ссылкой.CASCADE Corresponding rows are deleted from the referencing table if that row is deleted from the parent table.

SET NULL — все значения, составляющие внешний ключ, при удалении соответствующей строки родительской таблицы устанавливаются в NULL.SET NULL All the values that make up the foreign key are set to NULL if the corresponding row in the parent table is deleted. Для выполнения этого ограничения внешние ключевые столбцы должны допускать значения NULL.For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULT — все значения, составляющие внешний ключ, при удалении соответствующей строки родительской таблицы устанавливаются в значение по умолчанию.SET DEFAULT All the values that make up the foreign key are set to their default values if the corresponding row in the parent table is deleted. Для выполнения этого ограничения все внешние ключевые столбцы должны иметь определения по умолчанию.For this constraint to execute, all foreign key columns must have default definitions. Если столбец допускает значения NULL и значение по умолчанию явно не определено, значением столбца по умолчанию становится NULL.If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

Не следует использовать параметр CASCADE, если таблица будет включена в публикацию слиянием, в которой используются логические записи.Do not specify CASCADE if the table will be included in a merge publication that uses logical records. Дополнительные сведения о логических записях см. в статье Группирование изменений в связанных строках с помощью логических записей.For more information about logical records, see Group Changes to Related Rows with Logical Records.

Параметр ON DELETE CASCADE нельзя указывать, если в таблице уже существует триггер INSTEAD OF``ON DELETE.ON DELETE CASCADE cannot be defined if an INSTEAD OF trigger ON DELETE already exists on the table.

Например, в базе данных AdventureWorks2012AdventureWorks2012 таблица ProductVendor имеет ссылочную связь с таблицей Vendor.For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table. Внешний ключ ProductVendor.BusinessEntityID ссылается на первичный ключ Vendor.BusinessEntityID.The ProductVendor.BusinessEntityID foreign key references the Vendor.BusinessEntityID primary key.

Если для строки в таблице Vendor выполняется инструкция DELETE и для внешнего ключа ProductVendor.BusinessEntityID указано действие ON DELETE CASCADE, то компонент Компонент Database EngineDatabase Engine проверит наличие одной зависимой строки или нескольких в таблице ProductVendor.If a DELETE statement is executed on a row in the Vendor table, and an ON DELETE CASCADE action is specified for ProductVendor.BusinessEntityID, the Компонент Database EngineDatabase Engine checks for one or more dependent rows in the ProductVendor table. Если такие существуют, то кроме строки в таблице Vendor будут удалены также и все зависимые строки из таблицы ProductVendor.If any exist, the dependent rows in the ProductVendor table are deleted, and also the row referenced in the Vendor table.

В противном случае, если задан параметр NO ACTION, компонент Компонент Database EngineDatabase Engine выдает ошибку и производит откат операции по удалению строки из таблицы Vendor, если в таблице ProductVendor существует хотя бы одна строка, ссылающаяся на нее.Conversely, if NO ACTION is specified, the Компонент Database EngineDatabase Engine raises an error and rolls back the delete action on the Vendor row if there is at least one row in the ProductVendor table that references it.

ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } — определяет операцию, которая выполняется со строками изменяемой таблицы, если эти строки имеют ссылочную связь, а строка, на которую добавлены ссылки, изменяется в родительской таблице.ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } Specifies what action happens to rows in the table altered when those rows have a referential relationship and the referenced row is updated in the parent table. Параметр по умолчанию — NO ACTION.The default is NO ACTION.

NO ACTION — компонент Компонент Database EngineDatabase Engine возвращает ошибку, а обновление строки родительской таблицы откатывается.NO ACTION The Компонент Database EngineDatabase Engine raises an error, and the update action on the row in the parent table is rolled back.

CASCADE — соответствующие строки обновляются в ссылающейся таблице, если эта строка обновляется в родительской таблице.CASCADE Corresponding rows are updated in the referencing table when that row is updated in the parent table.

SET NULL — всем значениям, составляющим внешний ключ, присваивается значение NULL, когда обновляется соответствующая строка в родительской таблице.SET NULL All the values that make up the foreign key are set to NULL when the corresponding row in the parent table is updated. Для выполнения этого ограничения внешние ключевые столбцы должны допускать значения NULL.For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULT — всем значениям, составляющим внешний ключ, присваивается их значение по умолчанию, когда обновляется соответствующая строка в родительской таблице.SET DEFAULT All the values that make up the foreign key are set to their default values when the corresponding row in the parent table is updated. Для выполнения этого ограничения все внешние ключевые столбцы должны иметь определения по умолчанию.For this constraint to execute, all foreign key columns must have default definitions. Если столбец допускает значения NULL и значение по умолчанию явно не определено, значением столбца по умолчанию становится NULL.If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

Не указывайте параметр CASCADE, если таблица будет включена в публикацию слиянием, в которой используются логические записи.Do not specify CASCADE if the table will be included in a merge publication that uses logical records. Дополнительные сведения о логических записях см. в статье Группирование изменений в связанных строках с помощью логических записей.For more information about logical records, see Group Changes to Related Rows with Logical Records.

Действия ON UPDATE CASCADE, SET NULL и SET DEFAULT нельзя определить, если в изменяемой таблице уже существует триггер INSTEAD OF для условия ON UPDATE.ON UPDATE CASCADE, SET NULL, or SET DEFAULT cannot be defined if an INSTEAD OF trigger ON UPDATE already exists on the table that is being altered.

Например, в базе данных AdventureWorks2012AdventureWorks2012 таблица ProductVendor имеет ссылочную связь с таблицей Vendor. Внешний ключ ProductVendor.BusinessEntity ссылается на первичный ключ Vendor.BusinessEntityID.For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table: ProductVendor.BusinessEntity foreign key references the Vendor.BusinessEntityID primary key.

Если при выполнении инструкции UPDATE для строки в таблице Vendor указано ON UPDATE CASCADE для столбца ProductVendor.BusinessEntityID, компонент Компонент Database EngineDatabase Engine проверяет зависимые строи в таблице ProductVendor.If an UPDATE statement is executed on a row in the Vendor table, and an ON UPDATE CASCADE action is specified for ProductVendor.BusinessEntityID, the Компонент Database EngineDatabase Engine checks for one or more dependent rows in the ProductVendor table. Если такие существуют, то кроме строки в таблице Vendor будут обновлены также и все зависимые строки из таблицы ProductVendor.If any exist, the dependent rows in the ProductVendor table are updated, and also the row referenced in the Vendor table.

В противном случае, если задан параметр NO ACTION, компонент Компонент Database EngineDatabase Engine выдает ошибку и производит откат операции по обновлению строки из таблицы Vendor, если в таблице ProductVendor существует хотя бы одна строка, ссылающаяся на нее.Conversely, if NO ACTION is specified, the Компонент Database EngineDatabase Engine raises an error and rolls back the update action on the Vendor row if there is at least one row in the ProductVendor table that references it.

CHECK — ограничение, обеспечивающее целостность домена путем ограничения возможных значений, которые можно ввести в столбец или столбцы.CHECK Is a constraint that enforces domain integrity by limiting the possible values that can be entered into a column or columns. Ограничения CHECK в вычисляемых столбцах должны быть также помечены как PERSISTED.CHECK constraints on computed columns must also be marked PERSISTED.

logical_expression — логическое выражение, возвращающее значения TRUE или FALSE. logical_expression Is a logical expression that returns TRUE or FALSE. Псевдонимы типа данных частью выражения быть не могут.Alias data types cannot be part of the expression.

column — столбец или список столбцов (в скобках), используемый в ограничениях таблицы для указания столбцов, которые применяются в определении ограничения. column Is a column or list of columns, in parentheses, used in table constraints to indicate the columns used in the constraint definition.

[ ASC | DESC ] —указывает порядок сортировки столбца или столбцов, участвующих в ограничениях таблицы.[ ASC | DESC ] Specifies the order in which the column or columns participating in table constraints are sorted. Значение по умолчанию — ASC.The default is ASC.

partition_scheme_name — имя схемы секционирования, определяющей файловые группы, с которыми сопоставляются секции секционированной таблицы. partition_scheme_name Is the name of the partition scheme that defines the filegroups onto which the partitions of a partitioned table will be mapped. Эта схема секционирования должна существовать в базе данных.The partition scheme must exist within the database.

[ имя_столбца_раздела .[ partition_column_name. ] — указывает столбец, по которому будет секционирована таблица.] Specifies the column against which a partitioned table will be partitioned. Столбец должен совпадать с указанным в функции секционирования, которая используется аргументом partition_scheme_name, по типу данных, длине и точности.The column must match that specified in the partition function that partition_scheme_name is using in terms of data type, length, and precision. Вычисляемый столбец, участвующий в функции секционирования, должен быть явно обозначен ключевым словом PERSISTED.A computed columns that participates in a partition function must be explicitly marked PERSISTED.

Важно!

Рекомендуется указывать параметр NOT NULL для столбца секционирования секционированных таблиц, а также для несекционированных таблиц, являющихся источниками или целями для операций ALTER TABLE...SWITCH.We recommend that you specify NOT NULL on the partitioning column of partitioned tables, and also nonpartitioned tables that are sources or targets of ALTER TABLE...SWITCH operations. В результате любые ограничения CHECK, заданные для столбцов секционирования, не будут проверять значения NULL.Doing this makes sure that any CHECK constraints on partitioning columns do not have to check for null values.

WITH FILLFACTOR = fillfactor — указывает, насколько плотно компонент Компонент Database EngineDatabase Engine должен заполнять каждую страницу индекса, используемую для хранения данных индекса.WITH FILLFACTOR fillfactor Specifies how full the should make each index page that is used to store the index data. Пользовательские значения аргумента fillfactor могут быть в диапазоне от 1 до 100.User-specified fillfactor values can be from 1 through 100. Если значение не задано, по умолчанию принимается значение 0.If a value is not specified, the default is 0. Значения коэффициентов заполнения 0 и 100 идентичны.Fill factor values 0 and 100 are the same in all respects.

Важно!

Описание выражения WITH FILLFACTOR = fillfactor как единственного параметра индекса, применимого к ограничениям PRIMARY KEY или UNIQUE, сохранено для обеспечения обратной совместимости, но в будущих выпусках это выражение документировано не будет.Documenting WITH FILLFACTOR = fillfactor as the only index option that applies to PRIMARY KEY or UNIQUE constraints is maintained for backward compatibility, but will not be documented in this manner in future releases.

column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS — имя набора столбцов. column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS 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. Дополнительные сведения о наборах столбцов см. в разделе Использование наборов столбцов.For more information about column sets, see Use Column Sets.

PERIOD FOR SYSTEM_TIME (system_start_time_column_name , system_end_time_column_name ) Применимо к: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздних версий) и База данных SQL AzureAzure SQL Database.PERIOD FOR SYSTEM_TIME (system_start_time_column_name , system_end_time_column_name ) Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) and later) 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. Используйте этот аргумент в сочетании с аргументами GENERATED ALWAYS AS ROW { START | END } и WITH SYSTEM_VERSIONING = ON, чтобы выключить системное управление версиями в таблице.Use this argument in conjunction with the GENERATED ALWAYS AS ROW { START | END } and WITH SYSTEM_VERSIONING = ON arguments to enable system versioning on a table. Дополнительные сведения см. в разделе Temporal Tables.For more information, see Temporal Tables.

COMPRESSION_DELAY Применимо к: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздних версий) и База данных SQL AzureAzure SQL Database.COMPRESSION_DELAY Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) and later) and База данных SQL AzureAzure SQL Database.

Если используется оптимизация для памяти, указывается минимальное количество минут задержки, в течение которых строка должна оставаться в таблице без изменений до сжатия в индекс columnstore.For a memory-optimized, delay specifies the minimum number of minutes a row must remain in the table, unchanged, before it is eligible for compression into the columnstore index. SQL ServerSQL Server выбирает определенные строки для сжатия в зависимости от времени их последнего обновления.selects specific rows to compress according to their last update time. Например, если строки часто меняются в течение двухчасового периода, установите COMPRESSION_DELAY = 120 Minutes, чтобы обновления были завершены до того, как SQL Server сожмет строку.For example, if rows are changing frequently during a two-hour period of time, you could set COMPRESSION_DELAY = 120 Minutes to ensure updates are completed before SQL Server compresses the row.

Для таблицы на основе диска значение delay указывает минимальное количество минут, в течение которых разностная группа строк в состоянии CLOSED должна оставаться в разностной группе строк до того, как SQL ServerSQL Server сможет преобразовать ее в сжатую группу строк.For a disk-based table, delay specifies the minimum number of minutes a delta rowgroup in the CLOSED state must remain in the delta rowgroup before SQL ServerSQL Server can compress it into the compressed rowgroup. Так как таблицы на основе диска не отслеживают время вставки и обновления отдельных строк, в SQL ServerSQL Server применяется задержка к разностным группам строк в состоянии CLOSED.Since disk-based tables don't track insert and update times on individual rows, SQL ServerSQL Server applies the delay to delta rowgroups in the CLOSED state.

Значение по умолчанию — 0 минут.The default is 0 minutes.

Рекомендации по использованию COMPRESSION_DELAY см. в статье Начало работы с Columnstore для получения операционной аналитики в реальном времени.For recommendations on when to use COMPRESSION_DELAY, please see Get started with Columnstore for real time operational analytics

< table_option> ::= Указывает один или более параметров таблицы.< table_option> ::= Specifies one or more table options.

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

NONE — таблица или указанные секции не сжимаются.NONE Table or specified partitions are not compressed.

ROW — таблицы или указанные секции сжимаются, используется сжатие строк.ROW Table or specified partitions are compressed by using row compression.

PAGE — таблицы или указанные секции сжимаются, используется сжатие страниц.PAGE Table or specified partitions are compressed by using page compression.

COLUMNSTORECOLUMNSTORE

Применимо к: SQL Server 2016 (13.x);SQL Server 2016 (13.x) и выше, а также База данных SQL AzureAzure SQL Database. Applies to: and later and .

Применяется только к индексам columnstore, включая некластеризованные и кластеризованные индексы columnstore.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE задает сжатие с использованием самого эффективного сжатия columnstore.COLUMNSTORE specifies to compress with the most performant columnstore compression. Это обычный вариант.This is the typical choice.

COLUMNSTORE_ARCHIVE Применимо к: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздних версий) и База данных SQL AzureAzure SQL Database. **** Applies toSQL ServerSQL Server: SQL Server 2016 (13.x);SQL Server 2016 (13.x) ( and later) and База данных SQL AzureAzure SQL Database

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

Дополнительные сведения см. в разделе Data Compression.For more information, see Data Compression.

ON PARTITIONS ( { <partition_number_expression> | [ , ...n ] )  — указывает секции, к которым применяется параметр DATA_COMPRESSION.ON PARTITIONS ( { | [ ,...n ] ) Specifies the partitions to which the DATA_COMPRESSION setting applies. Если таблица не секционирована, аргумент ON PARTITIONS приведет к возникновению ошибки.If the table is not partitioned, the ON PARTITIONS argument will generate an error. Если не указано предложение ON PARTITIONS, параметр DATA_COMPRESSION применяется ко всем секциям секционированной таблицы.If the ON PARTITIONS clause is not provided, the DATA_COMPRESSION option will apply to all partitions of a partitioned table.

partition_number_expression можно указать одним из следующих способов: partition_number_expression can be specified in the following ways:

  • Указав номер секции, например: ON PARTITIONS (2)Provide the partition number of a partition, for example: ON PARTITIONS (2)
  • Указав номера нескольких секций, разделив их запятыми, например ON PARTITIONS (1, 5)Provide the partition numbers for several individual partitions separated by commas, for example: ON PARTITIONS (1, 5)
  • Указав диапазоны секций и отдельные секции, например ON PARTITIONS (2, 4, 6 TO 8)Provide both ranges and individual partitions, for example: ON PARTITIONS (2, 4, 6 TO 8)

<range> можно указать в виде номеров секций, разделенных ключевым словом TO, например: ON PARTITIONS (6 TO 8).<range> can be specified as partition numbers separated by the word TO, for example: ON PARTITIONS (6 TO 8).

Чтобы для разных секций задать разные типы сжатия данных, укажите параметр DATA_COMPRESSION несколько раз, например следующим образом:To set different types of data compression for different partitions, specify the DATA_COMPRESSION option more than once, for example:

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

<index_option> ::= — указывает один или более параметров индекса.<index_option> ::= Specifies one or more index options. Полное описание этих параметров см. в этой статье.For a complete description of these options, see CREATE INDEX.

PAD_INDEX = { ON | OFF } — если указано значение ON, процент свободного места, определяемый параметром FILLFACTOR, применяется к страницам индекса промежуточного уровня.PAD_INDEX = { ON | OFF } When ON, the percentage of free space specified by FILLFACTOR is applied to the intermediate level pages of the index. Если указано значение OFF или значение FILLFACTOR не указано, страницы промежуточного уровня заполняются до приблизительного объема, оставляющего достаточно места для, как минимум, одной строки максимального размера, которого может достигать индекс, при этом учитывается набор ключей на промежуточных страницах.When OFF or a FILLFACTOR value it not specified, the intermediate level pages are filled to near capacity leaving enough space for at least one row of the maximum size the index can have, considering the set of keys on the intermediate pages. Значение по умолчанию — OFF.The default is OFF.

FILLFACTOR = fillfactor — определяет величину в процентах, показывающую насколько должен компонент Компонент Database EngineDatabase Engine заполнять конечный уровень каждой страницы индекса во время его создания и изменения.FILLFACTOR fillfactor Specifies a percentage that indicates how full the should make the leaf level of each index page during index creation or alteration. Значение fillfactor должно быть целым числом от 1 до 100.fillfactor must be an integer value from 1 to 100. Значение по умолчанию равно 0.The default is 0. Значения коэффициентов заполнения 0 и 100 идентичны.Fill factor values 0 and 100 are the same in all respects.

IGNORE_DUP_KEY = { ON | OFF } — определяет реакцию на ошибку, возникающую при попытке вставки повторяющихся ключевых значений в уникальный индекс.IGNORE_DUP_KEY = { ON | OFF } Specifies the error response when an insert operation attempts to insert duplicate key values into a unique index. Параметр IGNORE_DUP_KEY применяется только к операциям вставки, производимым после создания или перестроения индекса.The IGNORE_DUP_KEY option applies only to insert operations after the index is created or rebuilt. Параметр не работает во время выполнения инструкции CREATE INDEX, ALTER INDEX или UPDATE.The option has no effect when executing CREATE INDEX, ALTER INDEX, or UPDATE. Значение по умолчанию — OFF.The default is OFF.

ON — если в уникальный индекс вставляются повторяющиеся значения ключа, выводится предупреждающее сообщение.ON A warning message will occur when duplicate key values are inserted into a unique index. С ошибкой завершаются только строки, нарушающие ограничение уникальности.Only the rows violating the uniqueness constraint will fail.

OFF — если в уникальный индекс вставляются повторяющиеся значения ключа, выводится сообщение об ошибке.OFF An error message will occur when duplicate key values are inserted into a unique index. Будет выполнен откат всей операции INSERT.The entire INSERT operation will be rolled back.

IGNORE_DUP_KEY нельзя установить в значение ON для индексов, создаваемых для представлений, неуникальных индексов, XML-индексов, пространственных индексов и фильтруемых индексов.IGNORE_DUP_KEY cannot be set to ON for indexes created on a view, non-unique indexes, XML indexes, spatial indexes, and filtered indexes.

Для просмотра значения IGNORE_DUP_KEY используйте sys.indexes.To view IGNORE_DUP_KEY, use sys.indexes.

Для обратной совместимости синтаксиса аргумент WITH IGNORE_DUP_KEY эквивалентен WITH IGNORE_DUP_KEY = ON.In backward compatible syntax, WITH IGNORE_DUP_KEY is equivalent to WITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = { ON | OFF } — если указано значение ON, устаревшая статистика индекса не вычисляется повторно автоматически.STATISTICS_NORECOMPUTE { ON | OFF } When ON, out-of-date index statistics are not automatically recomputed. Если указано значение OFF, включается автоматическое обновление статистик.When OFF, automatic statistics updating are enabled. Значение по умолчанию — OFF.The default is OFF.

ALLOW_ROW_LOCKS = { ON | OFF } — если указано значение ON, при доступе к индексу допустимы блокировки строк.ALLOW_ROW_LOCKS { ON | OFF } When ON, row locks are allowed when you access the index. Компонент Компонент Database EngineDatabase Engine определяет, когда используются блокировки строки.The Компонент Database EngineDatabase Engine determines when row locks are used. При значении OFF блокировки строк не используются.When OFF, row locks are not used. Значение по умолчанию — ON.The default is ON.

ALLOW_PAGE_LOCKS = { ON | OFF } — если указано значение ON, при доступе к индексу допустимы блокировки страниц.ALLOW_PAGE_LOCKS { ON | OFF } When ON, page locks are allowed when you access the index. Компонент Компонент Database EngineDatabase Engine определяет, когда используются блокировки страниц.The Компонент Database EngineDatabase Engine determines when page locks are used. При значении OFF блокировки страниц не используются.When OFF, page locks are not used. Значение по умолчанию — ON.The default is ON.

OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF } Применимо к: SQL Server 2019 (15.x)SQL Server 2019 (15.x) и более поздних версий.OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF } Applies to: SQL Server 2019 (15.x)SQL Server 2019 (15.x) and later.
Определяет, следует ли выполнять оптимизацию, связанную с состязанием при операциях вставки на последнюю страницу.Specifies whether or not to optimize for last-page insert contention. Значение по умолчанию — OFF.The default is OFF. См. подробнее раздел о последовательных ключах в документации по CREATE INDEX.See the Sequential Keys section of the CREATE INDEX page for more information.

FILETABLE_DIRECTORY = directory_nameFILETABLE_DIRECTORY = directory_name

Применимо к: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) и выше). Applies to: ( and later).

Указывает имя каталога таблицы FileTable, совместимое с Windows.Specifies the windows-compatible FileTable directory name. Это имя должно быть уникальным среди всех имен каталогов FileTable в базе данных.This name should be unique among all the FileTable directory names in the database. Проверка уникальности выполняется без учета регистра, независимо от параметров сортировки.Uniqueness comparison is case-insensitive, regardless of collation settings. Если это значение не задано, то используется имя таблицы FileTable.If this value is not specified, the name of the filetable is used.

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

Применимо к: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) и выше). Applies to: ( and later). База данных SQL AzureAzure SQL Database не поддерживает FILETABLE.does not support FILETABLE.

Указывает имя параметров сортировки, применяемых к столбцу Name в таблице FileTable.Specifies the name of the collation to be applied to the Name column in the FileTable. Для соответствия семантике именования файлов в операционной системе Windows параметры сортировки не должны учитывать регистр.The specified collation must be case-insensitive to comply with Windows file naming semantics. Если это значение не задано, то используются параметры сортировки по умолчанию базы данных.If this value is not specified, the database default collation is used. Если в параметрах сортировки по умолчанию базы данных учитывается регистр, то выдается ошибка и операция CREATE TABLE оканчивается неуспешно.If the database default collation is case-sensitive, an error is raised and the CREATE TABLE operation fails.

collation_name — имя параметров сортировки без учета регистра. collation_name The name of a case-insensitive collation.

database_default — указывает, что для базы данных следует использовать параметры сортировки по умолчанию.database_default Specifies that the default collation for the database should be used. Эти параметры сортировки не должны учитывать регистр символов.This collation must be case-insensitive.

FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name Применимо к: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) и более поздних версий).FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later).

Указывает имя, которое должно использоваться для ограничения первичного ключа, автоматически создаваемого в FileTable.Specifies the name to be used for the primary key constraint that is automatically created on the FileTable. Если это значение не задано, то имя для ограничения формируется системой.If this value is not specified, the system generates a name for the constraint.

FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name Применимо к: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) и более поздних версий).FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later).

Указывает имя, которое должно использоваться для ограничения уникальности, автоматически создаваемого в столбце stream_id в FileTable.Specifies the name to be used for the unique constraint that is automatically created on the stream_id column in the FileTable. Если это значение не задано, то имя для ограничения формируется системой.If this value is not specified, the system generates a name for the constraint.

FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name Применимо к: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) и более поздних версий).FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later).

Указывает имя, которое должно использоваться для ограничения уникальности, автоматически создаваемого в столбцах parent_path_locator и name в FileTable.Specifies the name to be used for the unique constraint that is automatically created on the parent_path_locator and name columns in the FileTable. Если это значение не задано, то имя для ограничения формируется системой.If this value is not specified, the system generates a name for the constraint.

SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name .history_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ] Применимо к: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздних версий и База данных SQL AzureAzure SQL Database).SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name .history_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ] Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) and later and База данных SQL AzureAzure SQL Database).

Допускает системное управление версиями таблицы, если выполнены требования по типу данных, ограничении допустимости значений NULL и ограничении первичного ключа.Enables system versioning of the table if the datatype, nullability constraint, and primary key constraint requirements 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 in the same filegroup as the current table, creating a link between the two tables and enables the system to record the history of each record in the current table in the history table. Таблица журнала будет называться MSSQL_TemporalHistoryFor<primary_table_object_id>.The name of this history table will be MSSQL_TemporalHistoryFor<primary_table_object_id>. По умолчанию таблица журнала сжимается с использованием метода PAGE .By default, the history table is PAGE compressed. Если аргумент 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. Если текущая таблица секционирована, таблица журнала создается в файловой группе по умолчанию, так как конфигурация секционирования не реплицируется автоматически из текущей таблицы в таблицу журнала.If current table is partitioned, the history table is created on default file group because partitioning configuration is not replicated automatically from the current table to the history table. Если при создании таблицы журнала указывается ее имя, следует также указать имя схемы и таблицы.If the name of a history table is specified during history table creation, you must specify the schema and table name. При создании ссылки на существующую таблицу журнала вы можете указать необходимость проверки согласованности данных.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. Используйте этот аргумент в сочетании с аргументами PERIOD FOR SYSTEM_TIME и GENERATED ALWAYS AS ROW { START | END }, чтобы выключить системное управление версиями в таблице.Use this argument in conjunction with the PERIOD FOR SYSTEM_TIME and GENERATED ALWAYS AS ROW { START | END } arguments to enable system versioning on a table. Дополнительные сведения см. в разделе Temporal Tables.For more information, see Temporal Tables.

REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [,...n] ) ] | OFF ( MIGRATION_STATE = PAUSED ) } Применимо к: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздних версий).REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [,...n] ) ] | OFF ( MIGRATION_STATE = PAUSED ) } Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) and later).

Создание новой таблицы, для которой включена или отключена Stretch Database.Creates the new table with Stretch Database enabled or disabled. Дополнительные сведения см. в разделе Stretch Database.For more info, see Stretch Database.

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

Если вы включаете Stretch для таблицы, указывая ON, вы можете дополнительно указать MIGRATION_STATE = OUTBOUND, чтобы сразу же приступить к переносу данных, или MIGRATION_STATE = PAUSED, чтобы отложить его.When you enable Stretch for a table by specifying ON, you can optionally specify MIGRATION_STATE = OUTBOUND to begin migrating data immediately, or MIGRATION_STATE = PAUSED to postpone data migration. Значение по умолчанию — MIGRATION_STATE = OUTBOUND.The default value is MIGRATION_STATE = OUTBOUND. Более подробную информацию о включении Stretch для таблицы см. в разделе Включение Stretch Database для таблицы.For more info about enabling Stretch for a table, see Enable Stretch Database for a table.

Предварительные требования.Prerequisites Прежде чем включить Stretch для таблицы, необходимо включить 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.

[ FILTER_PREDICATE = { null | predicate } ] Применимо к: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздних версий).[ FILTER_PREDICATE = { null | predicate } ] Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) and later).

Дополнительно указывает предикат фильтра для выбора строк для миграции из таблицы, которая содержит данные журнала и текущие данные.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 Database для таблицы и Выбор строк для миграции с помощью функции фильтра.For more info, see Enable Stretch Database for a table and Select rows to migrate by using a filter function.

Важно!

Если указать плохо оптимизированный предикат фильтра, перенос данных будет выполняться медленно.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 = { OUTBOUND | INBOUND | PAUSED } Применимо к: SQL ServerSQL Server (SQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздних версий) и База данных SQL AzureAzure SQL Database.MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED } Applies to: ( through ).

  • Укажите OUTBOUND для миграции данных с SQL ServerSQL Server на База данных SQL AzureAzure SQL Database.Specify OUTBOUND to migrate data from SQL ServerSQL Server to База данных SQL AzureAzure SQL Database.

  • Укажите INBOUND для копирования удаленных данных для таблицы из База данных SQL AzureAzure SQL Database обратно в SQL ServerSQL Server с отключением Stretch для таблицы.Specify INBOUND to copy the remote data for the table from База данных SQL AzureAzure SQL Database back to SQL ServerSQL Server and to disable Stretch for the table. Дополнительные сведения см. в разделе Отключение Stretch Database и возврат удаленных данных.For more info, see Disable Stretch Database and bring back remote data.

    Эта операция предусматривает расходы на передачу данных и не может быть отменена.This operation incurs data transfer costs, and it can't be canceled.

  • Укажите PAUSED для приостановки миграции данных.Specify PAUSED to pause or postpone data migration. Дополнительные сведения см. в разделе Приостановка и возобновление переноса данных (Stretch Database).For more info, see Pause and resume data migration -Stretch Database.

MEMORY_OPTIMIZED Применимо к: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) и более поздних версий и База данных SQL AzureAzure SQL Database). **** Applies toSQL ServerSQL Server: SQL Server 2014 (12.x)SQL Server 2014 (12.x) ( and later and База данных SQL AzureAzure SQL Database. Управляемый экземпляр База данных SQL AzureAzure SQL Database не поддерживает оптимизированные для памяти таблицы.База данных SQL AzureAzure SQL Database managed instance does not support memory optimized tables.

Значение ON указывает, что таблица оптимизирована для памяти.The value ON indicates that the table is memory optimized. Таблицы, оптимизированные для памяти, входят в функцию выполняющейся в памяти OLTP, которая используется для оптимизации производительности обработки транзакций.Memory-optimized tables are part of the In-Memory OLTP feature, which is used to optimized the performance of transaction processing. Чтобы приступить к работе с OLTP в памяти, см. статью Краткое руководство 1. Технологии выполнения OLTP в памяти для повышения производительности службы Transact-SQL.To get started with In-Memory OLTP see Quick Start 1: In-Memory OLTP Technologies for Faster Transact-SQL Performance. Дополнительные сведения об оптимизированных для памяти таблицах см. в разделе Таблицы, оптимизированные для памяти.For more in-depth information about memory-optimized tables see Memory-Optimized Tables.

Значение по умолчанию OFF указывает, что таблица основана на диске.The default value OFF indicates that the table is disk-based.

DURABILITY Применимо к: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) и более поздних версий) и База данных SQL AzureAzure SQL Database.DURABILITY Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later) and База данных SQL AzureAzure SQL Database.

Значение SCHEMA_AND_DATA указывает на устойчивость таблицы. Это означает, что изменения сохраняются на диске даже после перезагрузки или отработки отказа.The value of SCHEMA_AND_DATA indicates that the table is durable, meaning that changes are persisted on disk and survive restart or failover. SCHEMA_AND_DATA является значением по умолчанию.SCHEMA_AND_DATA is the default value.

Значение SCHEMA_ONLY указывает, что таблица не является устойчивой.The value of SCHEMA_ONLY indicates that the table is non-durable. При перезапуске или отработке отказа в базе данных схема таблицы сохраняется, а обновления данных — нет.The table schema is persisted but any data updates are not persisted upon a restart or failover of the database. Аргумент DURABILITY = SCHEMA_ONLY может использоваться только совместно с аргументом MEMORY_OPTIMIZED = ON.DURABILITY = SCHEMA_ONLY is only allowed with MEMORY_OPTIMIZED = ON.

Предупреждение

Если таблица создается с аргументом DURABILITY = SCHEMA_ONLY, а затем READ_COMMITTED_SNAPSHOT меняется с помощью ALTER DATABASE, данные в таблице будут утеряны.When a table is created with DURABILITY = SCHEMA_ONLY, and READ_COMMITTED_SNAPSHOT is subsequently changed using ALTER DATABASE, data in the table will be lost.

BUCKET_COUNT Применимо к: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) и более поздних версий и База данных SQL AzureAzure SQL Database.BUCKET_COUNT Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later and База данных SQL AzureAzure SQL Database.

Отображает число контейнеров, которые необходимо создать в хэш-индексе.Indicates the number of buckets that should be created in the hash index. Максимальное значение для параметра BUCKET_COUNT в хэш-индексах составляет 1 073 741 824.The maximum value for BUCKET_COUNT in hash indexes is 1,073,741,824. Дополнительные сведения о числах контейнеров см. в разделе Индексы для таблиц, оптимизированных для памяти.For more information about bucket counts, see Indexes for Memory-Optimized Tables.

Bucket_count — это обязательный аргумент.Bucket_count is a required argument.

INDEX Применимо к: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) и выше, а также База данных SQL AzureAzure SQL Database).INDEX Applies to: ( and later) and ).

Индексы столбцов и таблиц необходимо указывать в составе инструкции CREATE TABLE.Column and table indexes can be specified as part of the CREATE TABLE statement. Дополнительные сведения о добавлении и удалении индексов в таблицах, оптимизированных для памяти, см. в следующей статье: Изменение таблиц с оптимизацией для памятиFor details about adding and removing indexes on memory-optimized tables see: Altering Memory-Optimized Tables

HASH Применимо к: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) и более поздних версий) и База данных SQL AzureAzure SQL Database. **** Applies toSQL ServerSQL Server: SQL Server 2014 (12.x)SQL Server 2014 (12.x) ( and later) and База данных SQL AzureAzure SQL Database.

Указывает, что был создан индекс HASH.Indicates that a HASH index is created.

Хэш-индексы поддерживаются только в таблицах, оптимизированных для памяти.Hash indexes are supported only on memory-optimized tables.

RemarksRemarks

Сведения о допустимом количестве таблиц, столбцов, ограничений и индексов см. в разделе Спецификации максимально допустимых параметров SQL Server.For information about the number of allowed tables, columns, constraints and indexes, see Maximum Capacity Specifications for SQL Server.

Пространство таблицам и индексам обычно выделяется по одному экстенту за раз.Space is generally allocated to tables and indexes in increments of one extent at a time. Если для параметра SET MIXED_PAGE_ALLOCATION в инструкции ALTER DATABASE установлено значение TRUE или всегда до SQL Server 2016 (13.x);SQL Server 2016 (13.x), при создании таблицы или индекса они будут представлять собой выделенные страницы из разных экстентов, пока не наберется достаточно страниц для заполнения одного экстента.When the SET MIXED_PAGE_ALLOCATION option of ALTER DATABASE is set to TRUE, or always prior to SQL Server 2016 (13.x);SQL Server 2016 (13.x), when a table or index is created, it is allocated pages from mixed extents until it has enough pages to fill a uniform extent. Каждый раз, когда число страниц достигает размера однородного экстента, и текущие выделенные экстенты становятся заполненными, выделяется новый экстент.After it has enough pages to fill a uniform extent, another extent is allocated every time the currently allocated extents become full. Получить отчет об объеме выделенного и используемого таблицей пространства можно с помощью процедуры sp_spaceused.For a report about the amount of space allocated and used by a table, execute sp_spaceused.

Компонент Компонент Database EngineDatabase Engine не требует указания параметров DEFAULT, IDENTITY, ROWGUIDCOL или ограничения столбцов в определенном порядке при определении столбца.The Компонент Database EngineDatabase Engine does not enforce an order in which DEFAULT, IDENTITY, ROWGUIDCOL, or column constraints are specified in a column definition.

После создания таблицы параметр QUOTED IDENTIFIER всегда сохраняется в метаданных таблицы в состоянии ON, даже если он был установлен в состояние OFF при создании таблицы.When a table is created, the QUOTED IDENTIFIER option is always stored as ON in the metadata for the table, even if the option is set to OFF when the table is created.

Временные таблицыTemporary Tables

Можно создавать локальные и глобальные временные таблицы.You can create local and global temporary tables. Локальные временные таблицы видимы только во время текущего сеанса, а глобальные — во всех сеансах.Local temporary tables are visible only in the current session, and global temporary tables are visible to all sessions. Временные таблицы не подлежат секционированию.Temporary tables cannot be partitioned.

Имени локальной временной таблицы должен предшествовать символ решетки (#table_name), а имени глобальной временной таблицы — двойной символ решетки (##table_name).Prefix local temporary table names with single number sign (#table_name), and prefix global temporary table names with a double number sign (##table_name).

Инструкции Transact-SQLTransact-SQL могут обращаться к временной таблице по заданному в инструкции CREATE TABLE значению аргумента table_name, например: statements reference the temporary table by using the value specified for table_name in the statement, for example:

CREATE TABLE #MyTempTable (
    col1 INT PRIMARY KEY
);

INSERT INTO #MyTempTable
VALUES (1);

Если в пределах одной хранимой процедуры или пакета создается более одной временной таблицы, им должны быть присвоены разные имена.If more than one temporary table is created inside a single stored procedure or batch, they must have different names.

Параметр schema_name игнорируется при создании или временной таблице или обращении к ней.If you include a schema_name when you create or access a temporary table, it is ignored. Все временные таблицы создаются в схеме dbo.All temporary tables are created in the dbo schema.

Если локальная временная таблица создается хранимой процедурой или приложением, которые одновременно могут выполняться несколькими пользователями, компонент Компонент Database EngineDatabase Engine должен иметь возможность различать таблицы, созданные разными пользователями.If a local temporary table is created in a stored procedure or application that can be executed at the same time by several users, the Компонент Database EngineDatabase Engine must be able to distinguish the tables created by the different users. Компонент Компонент Database EngineDatabase Engine делает это путем внутреннего присоединения числового суффикса к имени каждой локальной временной таблицы.The Компонент Database EngineDatabase Engine does this by internally appending a numeric suffix to each local temporary table name. Полное имя временной таблицы, хранящееся в таблице sysobjects базы данных tempdb, состоит из имени таблицы, заданного инструкцией CREATE TABLE, и сформированного системой числового суффикса.The full name of a temporary table as stored in the sysobjects table in tempdb is made up of the table name specified in the CREATE TABLE statement and the system-generated numeric suffix. Для обеспечения возможности добавления суффикса значение параметра table_name, определенного как имя локальной временной таблицы, не должно содержать более 116 символов.To allow for the suffix, table_name specified for a local temporary name cannot exceed 116 characters.

Временные таблицы автоматически удаляются при выходе за пределы области определения, если не удалять их явно с помощью инструкции DROP TABLE.Temporary tables are automatically dropped when they go out of scope, unless explicitly dropped by using DROP TABLE:

  • Локальная временная таблица, созданная хранимой процедурой, удаляется автоматически при завершении хранимой процедуры.A local temporary table created in a stored procedure is dropped automatically when the stored procedure is finished. К этой таблице могут обращаться любые вложенные хранимые процедуры, выполняемые хранимой процедурой, создавшей таблицу.The table can be referenced by any nested stored procedures executed by the stored procedure that created the table. Процесс, вызвавший хранимую процедуру, создавшую таблицу, к этой таблице обращаться не может.The table cannot be referenced by the process that called the stored procedure that created the table.
  • Все прочие локальные временные таблицы удаляются автоматически в конце текущего сеанса.All other local temporary tables are dropped automatically at the end of the current session.
  • Глобальные временные таблицы автоматически удаляются при завершении сеанса, создавшего таблицу, и прекращении обращения к ним всех прочих задач.Global temporary tables are automatically dropped when the session that created the table ends and all other tasks have stopped referencing them. Взаимосвязь между задачей и таблицей поддерживается только на время выполнения отдельной инструкции Transact-SQLTransact-SQL.The association between a task and a table is maintained only for the life of a single Transact-SQLTransact-SQL statement. Это означает, что глобальная временная таблица удаляется после выполнения последней инструкции языка Transact-SQLTransact-SQL, активно обращавшейся к ней во время завершения создавшего таблицу сеанса.This means that a global temporary table is dropped at the completion of the last Transact-SQLTransact-SQL statement that was actively referencing the table when the creating session ended.

Локальная временная таблица, созданная хранимой процедурой или триггером, может иметь то же имя, что и временная таблица, созданная до вызова хранимой процедуры или триггера.A local temporary table created within a stored procedure or trigger can have the same name as a temporary table that was created before the stored procedure or trigger is called. Однако если запрос обращается к временной таблице и одновременно существует две таблицы с одинаковым именем, не определено, к какой из таблиц будет направлен запрос.However, if a query references a temporary table and two temporary tables with the same name exist at that time, it is not defined which table the query is resolved against. Вложенные хранимые процедуры могут также создавать временные таблицы с тем же именем, что и временная таблица, созданная вызывающей хранимой процедурой.Nested stored procedures can also create temporary tables with the same name as a temporary table that was created by the stored procedure that called it. Однако для применения изменений к таблице, созданной во вложенной процедуре, эта таблица должна иметь ту же структуру с теми же именами столбцов, что и таблица, созданная в вызывающей процедуре.However, for modifications to resolve to the table that was created in the nested procedure, the table must have the same structure, with the same column names, as the table created in the calling procedure. Это показано в следующем примере.This is shown in the following example.

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

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

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

EXEC Test1;
GO

Результирующий набор:Here is the result set.

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

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

При создании локальных или глобальных временных таблиц синтаксис инструкции CREATE TABLE поддерживает определение всех ограничений, кроме FOREIGN KEY.When you create local or global temporary tables, the CREATE TABLE syntax supports constraint definitions except for FOREIGN KEY constraints. Если во временной таблице указано ограничение FOREIGN KEY, инструкция возвращает предупредительное сообщение, указывающее на то, что ограничение было пропущено.If a FOREIGN KEY constraint is specified in a temporary table, the statement returns a warning message that states the constraint was skipped. При этом таблица создается без ограничений FOREIGN KEY.The table is still created without the FOREIGN KEY constraints. В ограничениях FOREIGN KEY обращение к временным таблицам недопустимо.Temporary tables cannot be referenced in FOREIGN KEY constraints.

При создании таблицы с именованным ограничением внутри области, определяемой пользователем транзакции, возможность выполнения инструкций, формирующих временные таблицы, ограничивается одним пользователем единовременно.If a temporary table is created with a named constraint and the temporary table is created within the scope of a user-defined transaction, only one user at a time can execute the statement that creates the temp table. Например, если хранимая процедура формирует временную таблицу с именованным ограничением первичного ключа, то она не может быть выполнена несколькими пользователями одновременно.For example, if a stored procedure creates a temporary table with a named primary key constraint, the stored procedure cannot be executed simultaneously by multiple users.

Глобальные временные таблицы (база данных SQL Azure) в области базы данныхDatabase scoped global temporary tables (Azure SQL Database)

Глобальные временные таблицы для SQL ServerSQL Server (с префиксом ##) хранятся в базе данных tempdb и являются общими для всех сеансов пользователей во всем экземпляре SQL ServerSQL Server.Global temporary tables for SQL ServerSQL Server (initiated with ## table name) are stored in tempdb and shared among all users' sessions across the whole SQL ServerSQL Server instance. Дополнительную информацию о типах таблиц SQL см. в предыдущем разделе о создании таблиц.For information on SQL table types, see the above section on Create Tables.

База данных SQL AzureAzure SQL Database поддерживает глобальные временные таблицы, которые хранятся в базе данных tempdb и областью действия которых является база данных.supports global temporary tables that are also stored in tempdb and scoped to the database level. Это означает, что глобальные временные таблицы являются общими для всех сеансов пользователей в рамках одной База данных SQL AzureAzure SQL Database.This means that global temporary tables are shared for all users' sessions within the same База данных SQL AzureAzure SQL Database. Сеансы пользователей, связанные с другими базами данных, не имеют доступа к глобальным временным таблицам.User sessions from other databases cannot access global temporary tables.

В глобальных временных таблицах для База данных SQL AzureAzure SQL Database используются те же синтаксис и семантика, что и для временных таблиц в SQL ServerSQL Server.Global temporary tables for База данных SQL AzureAzure SQL Database follow the same syntax and semantics that SQL ServerSQL Server uses for temporary tables. Точно так же временные хранимые процедуры действуют в области базы данных в База данных SQL AzureAzure SQL Database.Similarly, global temporary stored procedures are also scoped to the database level in База данных SQL AzureAzure SQL Database. Локальные временные таблицы (с префиксом #) также поддерживаются База данных SQL AzureAzure SQL Database и имеют тот же синтаксис и семантику, что и в SQL ServerSQL Server.Local temporary tables (initiated with # table name) are also supported for База данных SQL AzureAzure SQL Database and follow the same syntax and semantics that SQL ServerSQL Server uses. См. предыдущий раздел Временные таблицы.See the above section on Temporary Tables.

Важно!

Эта возможность доступна для База данных SQL AzureAzure SQL Database.This feature is available for База данных SQL AzureAzure SQL Database.

Устранение неполадок с глобальными временными таблицами в Базе данных SQL AzureTroubleshooting global temporary tables for Azure SQL Database

Сведения об устранении неполадок с базой данных tempdb см. в разделе Мониторинг использования базы данных tempdb.For the troubleshooting the tempdb, see How to Monitor tempdb use.

Примечание

Только администратор сервера может получить доступ к динамическим административным представлениям для устранения неполадок в База данных SQL AzureAzure SQL Database.Only a server admin can access the troubleshooting DMVs in База данных SQL AzureAzure SQL Database.

РазрешенияPermissions

Любой пользователь может создавать глобальные временные объекты.Any user can create global temporary objects. Если не предоставлены какие-либо дополнительные разрешения, то пользователи могут производить доступ только к тем объектам, которыми они владеют.Users can only access their own objects, unless they receive additional permissions.

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

Перед созданием секционированной таблицы с помощью инструкции CREATE TABLE следует вначале создать функцию секционирования, чтобы указать, как должна быть секционирована таблица.Before creating a partitioned table by using CREATE TABLE, you must first create a partition function to specify how the table becomes partitioned. Функция секционирования создается с помощью инструкции CREATE PARTITION FUNCTION.A partition function is created by using CREATE PARTITION FUNCTION. Затем необходимо создать схему секционирования, чтобы указать файловые группы, которые будут содержать указанные функцией секционирования секции.Second, you must create a partition scheme to specify the filegroups that will hold the partitions indicated by the partition function. Схема секционирования создается с помощью инструкции CREATE PARTITION SCHEME.A partition scheme is created by using CREATE PARTITION SCHEME. Для секционированных таблиц нельзя указать ограничения PRIMARY KEY или UNIQUE для разделения файловых групп.Placement of PRIMARY KEY or UNIQUE constraints to separate filegroups cannot be specified for partitioned tables. Дополнительные сведения см. в разделе Partitioned Tables and Indexes.For more information, see Partitioned Tables and Indexes.

Ограничения PRIMARY KEYPRIMARY KEY Constraints

  • В таблице возможно наличие только одного ограничения по первичному ключу.A table can contain only one PRIMARY KEY constraint.

  • Индекс, формируемый ограничением PRIMARY KEY, не может привести к выходу количества индексов в таблице за пределы в 999 некластеризованных индексов и 1 кластеризованный.The index generated by a PRIMARY KEY constraint cannot cause the number of indexes on the table to exceed 999 nonclustered indexes and 1 clustered index.

  • Если для ограничения PRIMARY KEY не указан параметр CLUSTERED или NONCLUSTERED, применяется параметр CLUSTERED, если для ограничения UNIQUE не определено кластеризованных индексов.If CLUSTERED or NONCLUSTERED is not specified for a PRIMARY KEY constraint, CLUSTERED is used if there are no clustered indexes specified for UNIQUE constraints.

  • Все столбцы с ограничением PRIMARY KEY должны иметь признак NOT NULL.All columns defined within a PRIMARY KEY constraint must be defined as NOT NULL. Если допустимость значения NULL не указана, то для всех столбцов c ограничением PRIMARY KEY устанавливается признак NOT NULL.If nullability is not specified, all columns participating in a PRIMARY KEY constraint have their nullability set to NOT NULL.

    Примечание

    В таблицах, оптимизированных для памяти, допускается ключевой столбец, способный принимать значение NULL.For memory-optimized tables, the NULLable key column is allowed.

  • Если первичный ключ определен на столбце определяемого пользователем типа данных CLR, реализация этого типа должна поддерживать двоичную сортировку.If a primary key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. Дополнительные сведения об определяемых пользователем типах данных CLR см. в разделе Определяемые пользователем типы данных CLR.For more information, see CLR User-Defined Types.

Ограничения UNIQUEUNIQUE Constraints

  • Если для ограничения UNIQUE не указан параметр CLUSTERED или NONCLUSTERED, по умолчанию применяется параметр NONCLUSTERED.If CLUSTERED or NONCLUSTERED is not specified for a UNIQUE constraint, NONCLUSTERED is used by default.
  • Каждое ограничение уникальности создает индекс.Each UNIQUE constraint generates an index. Количество ограничений UNIQUE не может привести к выходу количества индексов в таблице за пределы в 999 некластеризованных индексов и 1 кластеризованный.The number of UNIQUE constraints cannot cause the number of indexes on the table to exceed 999 nonclustered indexes and 1 clustered index.
  • Если ограничение уникальности определено на столбце определяемого пользователем типа данных CLR, реализация этого типа должна поддерживать двоичную сортировку или сортировку на основе оператора.If a unique constraint is defined on a CLR user-defined type column, the implementation of the type must support binary or operator-based ordering. Дополнительные сведения об определяемых пользователем типах данных CLR см. в разделе Определяемые пользователем типы данных CLR.For more information, see CLR User-Defined Types.

Ограничения FOREIGN KEYFOREIGN KEY Constraints

  • Если столбцу, имеющему ограничение внешнего ключа, задается значение, отличное от NULL, такое же значение должно существовать и в указываемом столбце; в противном случае будет возвращено сообщение о нарушении внешнего ключа.When a value other than NULL is entered into the column of a FOREIGN KEY constraint, the value must exist in the referenced column; otherwise, a foreign key violation error message is returned.

  • Если не указаны исходные столбцы, ограничения FOREIGN KEY применяются к предшествующему столбцу.FOREIGN KEY constraints are applied to the preceding column, unless source columns are specified.

  • Ограничения FOREIGN KEY могут ссылаться только на таблицы в пределах той же базы данных на том же сервере.FOREIGN KEY constraints can reference only tables within the same database on the same server. Межбазовую ссылочную целостность необходимо реализовать посредством триггеров.Cross-database referential integrity must be implemented through triggers. Дополнительные сведения см. в статье об инструкции CREATE TRIGGER.For more information, see CREATE TRIGGER.

  • Ограничения FOREIGN KEY могут ссылаться на другие столбцы той же таблицы.FOREIGN KEY constraints can reference another column in the same table. Это называется самовызовом.This is referred to as a self-reference.

  • Предложение REFERENCES ограничения внешнего ключа на уровне столбца может содержать только один ссылочный столбец.The REFERENCES clause of a column-level FOREIGN KEY constraint can list only one reference column. Этот столбец должен принадлежать к тому же типу данных, что и столбец, для которого определяется ограничение.This column must have the same data type as the column on which the constraint is defined.

  • Предложение REFERENCES ограничения внешнего ключа на уровне таблицы должно содержать такое же число ссылочных столбцов, какое содержится в списке столбцов в ограничении.The REFERENCES clause of a table-level FOREIGN KEY constraint must have the same number of reference columns as the number of columns in the constraint column list. Тип данных каждого ссылочного столбца должен также совпадать с типом соответствующего столбца в списке столбцов.The data type of each reference column must also be the same as the corresponding column in the column list.

  • Если частью внешнего ключа или ключа, на который указывает ссылка, является столбец типа timestamp, ключевые слова CASCADE, SET NULL и SET DEFAULT указывать нельзя.CASCADE, SET NULL or SET DEFAULT cannot be specified if a column of type timestamp is part of either the foreign key or the referenced key.

  • Ключевые слова CASCADE, SET NULL, SET DEFAULT и NO ACTION можно сочетать в таблицах, имеющих взаимные ссылочные связи.CASCADE, SET NULL, SET DEFAULT and NO ACTION can be combined on tables that have referential relationships with each other. Если компонент Компонент Database EngineDatabase Engine обнаруживает ключевое слово NO ACTION, оно остановит и произведет откат связанных операций CASCADE, SET NULL и SET DEFAULT.If the Компонент Database EngineDatabase Engine encounters NO ACTION, it stops and rolls back related CASCADE, SET NULL and SET DEFAULT actions. Если инструкция DELETE содержит сочетание ключевых слов CASCADE, SET NULL, SET DEFAULT и NO ACTION, то все операции CASCADE, SET NULL и SET DEFAULT выполняются перед поиском компонентом Компонент Database EngineDatabase Engine операции NO ACTION.When a DELETE statement causes a combination of CASCADE, SET NULL, SET DEFAULT and NO ACTION actions, all the CASCADE, SET NULL and SET DEFAULT actions are applied before the Компонент Database EngineDatabase Engine checks for any NO ACTION.

  • Компонент Компонент Database EngineDatabase Engine не имеет стандартного предела на количество ограничений FOREIGN KEY, содержащихся в таблице, ссылающейся на другие таблицы, или на количество ограничений FOREIGN KEY в других таблицах, ссылающихся на указанную таблицу.The Компонент Database EngineDatabase Engine does not have a predefined limit on either the number of FOREIGN KEY constraints a table can contain that reference other tables, or the number of FOREIGN KEY constraints that are owned by other tables that reference a specific table.

    Тем не менее фактическое количество ограничений FOREIGN KEY, доступных для использования, ограничивается конфигурацией оборудования, базы данных и приложения.Nevertheless, the actual number of FOREIGN KEY constraints that can be used is limited by the hardware configuration and by the design of the database and application. Рекомендуется, чтобы таблица содержала не более 253 ограничений FOREIGN KEY, а также чтобы на нее ссылалось не более 253 ограничений FOREIGN KEY.We recommend that a table contain no more than 253 FOREIGN KEY constraints, and that it be referenced by no more than 253 FOREIGN KEY constraints. Предел эффективности в конкретном случае может более или менее зависеть от приложения и оборудования.The effective limit for you may be more or less depending on the application and hardware. При разработке базы данных и приложений следует учитывать стоимость принудительных ограничений FOREIGN KEY.Consider the cost of enforcing FOREIGN KEY constraints when you design your database and applications.

  • Ограничения FOREIGN KEY не применяются к временным таблицам.FOREIGN KEY constraints are not enforced on temporary tables.

  • Ограничения FOREIGN KEY могут ссылаться только на столбцы с ограничениями PRIMARY KEY или UNIQUE в таблице, на которую указывает ссылка, или на столбцы уникального индекса (UNIQUE INDEX) такой таблицы.FOREIGN KEY constraints can reference only columns in PRIMARY KEY or UNIQUE constraints in the referenced table or in a UNIQUE INDEX on the referenced table.

  • Если внешний ключ определен на столбце определяемого пользователем типа данных CLR, реализация этого типа должна поддерживать двоичную сортировку.If a foreign key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. Дополнительные сведения об определяемых пользователем типах данных CLR см. в разделе Определяемые пользователем типы данных CLR.For more information, see CLR User-Defined Types.

  • Столбцы, участвующие в связи по внешнему ключу, должны иметь одинаковую длину и масштаб.Columns participating in a foreign key relationship must be defined with the same length and scale.

DEFAULT, определенияDEFAULT definitions

  • Столбец может иметь только определение DEFAULT.A column can have only one DEFAULT definition.

  • Ограничение DEFAULT может содержать значения констант, функции, стандартные функции без параметров SQL или значение NULL.A DEFAULT definition can contain constant values, functions, SQL standard niladic functions, or NULL. В следующей таблице приведены функции без параметров и возвращаемые ими по умолчанию значения в процессе выполнения инструкции INSERT.The following table shows the niladic functions and the values they return for the default during an INSERT statement.

    Функция без параметров SQL-92SQL-92 niladic function Возвращенное значениеValue returned
    CURRENT_TIMESTAMPCURRENT_TIMESTAMP Текущие дата и время.Current date and time.
    CURRENT_USERCURRENT_USER Имя пользователя, выполняющего вставку.Name of user performing an insert.
    SESSION_USERSESSION_USER Имя пользователя, выполняющего вставку.Name of user performing an insert.
    SYSTEM_USERSYSTEM_USER Имя пользователя, выполняющего вставку.Name of user performing an insert.
    ПользовательUSER Имя пользователя, выполняющего вставку.Name of user performing an insert.
  • Выражение constant_expression в определении DEFAULT не может ссылаться на другой столбец таблицы, а также на другие таблицы, представления или хранимые процедуры. constant_expression in a DEFAULT definition cannot refer to another column in the table, or to other tables, views, or stored procedures.

  • Определения DEFAULT нельзя создавать для столбцов с типом данных timestamp или столбцов со свойством IDENTITY.DEFAULT definitions cannot be created on columns with a timestamp data type or columns with an IDENTITY property.

  • Определения DEFAULT нельзя создавать для столбцов с псевдонимами типов данных, если такой тип привязан к определенному по умолчанию объекту.DEFAULT definitions cannot be created for columns with alias data types if the alias data type is bound to a default object.

Ограничения CHECKCHECK Constraints

  • Столбец может содержать любое количество ограничений CHECK, а условие может включать несколько логических выражений, соединенных операторами AND и OR.A column can have any number of CHECK constraints, and the condition can include multiple logical expressions combined with AND and OR. При указании нескольких ограничений CHECK для столбца их проверка производится в порядке создания.Multiple CHECK constraints for a column are validated in the order they are created.

  • Условие поиска должно возвращать логическое выражение и не может ссылаться на другую таблицу.The search condition must evaluate to a Boolean expression and cannot reference another table.

  • Ограничение CHECK уровня столбца может ссылаться только на ограничиваемый столбец, а ограничение CHECK уровня таблицы — только на столбцы этой таблицы.A column-level CHECK constraint can reference only the constrained column, and a table-level CHECK constraint can reference only columns in the same table.

    Правила и ограничения CHECK выполняют одну и ту же функцию проверки данных при выполнении инструкций INSERT и UPDATE.CHECK CONSTRAINTS and rules serve the same function of validating the data during INSERT and UPDATE statements.

  • Если для столбца или столбцов задано правило либо одно или несколько ограничений CHECK, применяются все ограничения.When a rule and one or more CHECK constraints exist for a column or columns, all restrictions are evaluated.

  • Ограничения CHECK нельзя определять для столбцов типов text, ntext или image.CHECK constraints cannot be defined on text, ntext, or image columns.

Дополнительные сведения об ограниченияхAdditional Constraint information

  • Индекс, созданный для ограничения, нельзя удалить с помощью инструкции DROP INDEX. Вам нужно удалить ограничение с помощью инструкции ALTER TABLE.An index created for a constraint cannot be dropped by using DROP INDEX; the constraint must be dropped by using ALTER TABLE. Индекс, созданный для ограничения и используемый им, можно перестроить с помощью инструкции ALTER INDEX ... REBUILD.An index created for and used by a constraint can be rebuilt by using ALTER INDEX ... REBUILD. Дополнительные сведения см. в статье Реорганизация и перестроение индексов.For more information, see Reorganize and Rebuild Indexes.
  • Имена ограничений должны подчиняться правилам для идентификаторов, за исключением тех, которые не могут начинаться с символа решетки (#).Constraint names must follow the rules for identifiers, except that the name cannot start with a number sign (#). Если аргумент constraint_name не указан, то ограничению присваивается имя, формируемое системой.If constraint_name is not supplied, a system-generated name is assigned to the constraint. Имя ограничения отображается в любых сообщениях об ошибках, связанных с нарушением ограничения.The constraint name appears in any error message about constraint violations.
  • При нарушении ограничения в инструкции INSERT, UPDATE или DELETE выполнение инструкции прекращается.When a constraint is violated in an INSERT, UPDATE, or DELETE statement, the statement is ended. Однако если параметр SET XACT_ABORT установлен в значение OFF, а инструкция является частью явной транзакции, выполнение этой транзакции продолжается.However, when SET XACT_ABORT is set to OFF, the transaction, if the statement is part of an explicit transaction, continues to be processed. Если параметр SET XACT_ABORT установлен в значение ON, производится откат всей транзакции.When SET XACT_ABORT is set to ON, the whole transaction is rolled back. С определением транзакции можно также использовать инструкцию ROLLBACK TRANSACTION, установив флажок для системной функции @@ERROR.You can also use the ROLLBACK TRANSACTION statement with the transaction definition by checking the @@ERROR system function.
  • Когда присвоены значения ALLOW_ROW_LOCKS = ON и ALLOW_PAGE_LOCK = ON, при доступе к индексу допустимы блокировки на уровне строк, страниц и таблиц.When ALLOW_ROW_LOCKS = ON and ALLOW_PAGE_LOCK = ON, row-, page-, and table-level locks are allowed when you access the index. Компонент Компонент Database EngineDatabase Engine выбирает соответствующую блокировку и может повышать уровень с блокировки строки или страницы до блокировки таблицы.The Компонент Database EngineDatabase Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock. Если присвоены значения ALLOW_ROW_LOCKS = OFF и ALLOW_PAGE_LOCK = OFF, при доступе к индексу допустима только блокировка на уровне таблиц.When ALLOW_ROW_LOCKS = OFF and ALLOW_PAGE_LOCK = OFF, only a table-level lock is allowed when you access the index.
  • Если в таблице содержатся ограничения FOREIGN KEY или CHECK и триггеры, условия ограничений вычисляются перед выполнением триггера.If a table has FOREIGN KEY or CHECK CONSTRAINTS and triggers, the constraint conditions are evaluated before the trigger is executed.

Получить отчет о таблице и ее столбцах можно с помощью процедуры sp_help или sp_helpconstraint.For a report on a table and its columns, use sp_help or sp_helpconstraint. Для переименования таблицы используется процедура sp_rename.To rename a table, use sp_rename. Чтобы получить сведения о представлениях и хранимых процедурах, зависящих от таблицы, используйте функции sys.dm_sql_referenced_entities и sys.dm_sql_referencing_entities.For a report on the views and stored procedures that depend on a table, use sys.dm_sql_referenced_entities and sys.dm_sql_referencing_entities.

Правила допустимости значения NULL в рамках определения таблицыNullability rules within a table definition

Допустимость значения NULL для столбца зависит от того, разрешено ли значение NULL в качестве допустимого значения данных этого столбца.The nullability of a column determines whether that column can allow a null value (NULL) as the data in that column. Значение NULL не равнозначно нулю или пустой строке: оно указывает, что запись не была произведена или было явно указано значение NULL; обычно оно означает, что значение неизвестно либо неприменимо.NULL is not zero or blank: NULL means no entry was made or an explicit NULL was supplied, and it typically implies that the value is either unknown or not applicable.

При создании или изменении таблицы с помощью инструкции CREATE TABLE или ALTER TABLE параметры базы данных и сеанса влияют на допустимость значений NULL для типа данных, указанного в определении столбца, и могут переопределять ее.When you use CREATE TABLE or ALTER TABLE to create or alter a table, database and session settings influence and possibly override the nullability of the data type that is used in a column definition. Рекомендуется всегда явно определять столбец как NULL или NOT NULL для невычисляемых столбцов или, если используется пользовательский тип данных, разрешать, чтобы для столбца применялась возможность, установленная для этого типа по умолчанию.We recommend that you always explicitly define a column as NULL or NOT NULL for noncomputed columns or, if you use a user-defined data type, that you allow the column to use the default nullability of the data type. Для разреженных столбцов всегда должно быть разрешено значение NULL.Sparse columns must always allow NULL.

Если возможность столбца принимать значение NULL не задана явно, она определяется согласно правилам, указанным в следующей таблице.When column nullability is not explicitly specified, column nullability follows the rules shown in the following table.

|Тип данных столбцаColumn data type|ПравилоRule| |----------------------|----------| |Псевдоним типа данныхAlias data type|Компонент Компонент Database EngineDatabase Engine использует допустимость значений NULL, указанную при создании типа данных.The Компонент Database EngineDatabase Engine uses the nullability that is specified when the data type was created. Чтобы выяснить допустимость значений NULL по умолчанию для типа данных, используется процедура sp_help.To determine the default nullability of the data type, use sp_help.| |CLR, определяемый пользователем тип данныхCLR user-defined type|Допустимость значения NULL определяется в соответствии с определением столбца.Nullability is determined according to the column definition.| |Системный тип данныхSystem-supplied data type|Если для системного типа данных предусмотрен только один вариант, он и применяется.If the system-supplied data type has only one option, it takes precedence. Для столбцов типа timestamp должен быть указан параметр NOT NULL. timestamp data types must be NOT NULL. Если любые параметры сеанса с помощью инструкции SET установлены в ON:When any session settings are set ON by using SET:
ANSI_NULL_DFLT_ON = ON — применяется NULL. ANSI_NULL_DFLT_ON = ON, NULL is assigned.
ANSI_NULL_DFLT_OFF = ON — применяется NOT NULL. ANSI_NULL_DFLT_OFF = ON, NOT NULL is assigned.

Если настроены какие-либо параметры базы данных с помощью инструкции ALTER DATABASE:When any database settings are configured by using ALTER DATABASE:
ANSI_NULL_DEFAULT_ON = ON — применяется NULL. ANSI_NULL_DEFAULT_ON = ON, NULL is assigned.
ANSI_NULL_DEFAULT_OFF = ON — применяется NOT NULL. ANSI_NULL_DEFAULT_OFF = ON, NOT NULL is assigned.

Просмотреть параметр базы данных ANSI_NULL_DEFAULT можно в представлении каталога sys.databasesTo view the database setting for ANSI_NULL_DEFAULT, use the sys.databases catalog view|

Если для сеанса не установлен ни один из параметров ANSI_NULL_DFLT, а база данных настроена по умолчанию (ANSI_NULL_DEFAULT = OFF), применяется установленное по умолчанию значение NOT NULL.When neither of the ANSI_NULL_DFLT options is set for the session and the database is set to the default (ANSI_NULL_DEFAULT is OFF), the default of NOT NULL is assigned.

Если столбец является вычисляемым, допустимость значения NULL для него всегда определяется компонентом Компонент Database EngineDatabase Engine автоматически.If the column is a computed column, its nullability is always automatically determined by the Компонент Database EngineDatabase Engine. Определить допустимость значения NULL для этого типа столбцов можно с помощью функции COLUMNPROPERTY со свойством AllowsNull.To find out the nullability of this type of column, use the COLUMNPROPERTY function with the AllowsNull property.

Примечание

Как драйвер ODBC для SQL Server, так и драйвер OLE DB для SQL Server предусматривают по умолчанию значение параметра ANSI_NULL_DFLT_ON, равное ON.The SQL Server ODBC driver and SQL Server OLE DB driver both default to having ANSI_NULL_DFLT_ON set to ON. Пользователи ODBC и OLE DB могут настраивать этот параметр в источниках данных ODBC или с помощью установки атрибутов или свойств соединения в приложении.ODBC and OLE DB users can configure this in ODBC data sources, or with connection attributes or properties set by the application.

Сжатие данныхData Compression

В системных таблицах не может быть включено сжатие.System tables cannot be enabled for compression. При создании таблицы параметру сжатия данных присваивается значение NONE, если не указано иное.When you are creating a table, data compression is set to NONE, unless specified otherwise. При указании списка секций или секции, выходящей за пределы диапазона, будет сформирована ошибка.If you specify a list of partitions or a partition that is out of range, an error will be generated. Дополнительную информацию о сжатии данных см. в разделе Сжатие данных.For a more information about data compression, see Data 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.

РазрешенияPermissions

Требуется разрешение CREATE TABLE в базе данных и разрешение ALTER для схемы, в которой создается таблица.Requires CREATE TABLE permission in the database and ALTER permission on the schema in which the table is being created.

Если какие-либо столбцы в инструкции CREATE TABLE определены как принадлежащие к пользовательскому типу, необходимо иметь разрешение REFERENCES для этого типа.If any columns in the CREATE TABLE statement are defined to be of a user-defined type, REFERENCES permission on the user-defined type is required.

Если какие-либо столбцы в инструкции CREATE TABLE определены как принадлежащие к определяемому пользователем типу данных CLR, необходимо быть владельцем этого типа либо иметь разрешение REFERENCES для него.If any columns in the CREATE TABLE statement are defined to be of a CLR user-defined type, either ownership of the type or REFERENCES permission on it is required.

Если какие-либо столбцы в инструкции CREATE TABLE имеют связанную коллекцию схем XML, необходимо быть владельцем этой коллекции схем или иметь разрешение REFERENCES для нее.If any columns in the CREATE TABLE statement have an XML schema collection associated with them, either ownership of the XML schema collection or REFERENCES permission on it is required.

Временные таблицы в базе данных tempdb может создавать любой пользователь.Any user can create temporary tables in tempdb.

ПримерыExamples

A.A. Создание ограничения PRIMARY KEY для столбцаCreate a PRIMARY KEY constraint on a column

В следующем примере показано определение ограничения PRIMARY KEY с кластеризованным индексом для столбца EmployeeID таблицы Employee.The following example shows the column definition for a PRIMARY KEY constraint with a clustered index on the EmployeeID column of the Employee table. Поскольку имя ограничения не указано, оно будет подставлено системой.Because a constraint name is not specified, the system supplies the constraint name.

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

Б.B. Использование ограничений FOREIGN KEYUsing FOREIGN KEY constraints

Ограничение FOREIGN KEY используется для ссылки на другую таблицу.A FOREIGN KEY constraint is used to reference another table. Внешние ключи могут включать один или несколько столбцов.Foreign keys can be single-column keys or multicolumn keys. В следующем примере показано ограничение FOREIGN KEY с одним столбцом в таблице SalesOrderHeader, ссылающееся на таблицу SalesPerson.This following example shows a single-column FOREIGN KEY constraint on the SalesOrderHeader table that references the SalesPerson table. Для ограничения FOREIGN KEY с одним столбцом требуется только предложение REFERENCES.Only the REFERENCES clause is required for a single-column FOREIGN KEY constraint.

SalesPersonID INT NULL REFERENCES SalesPerson(SalesPersonID)

Кроме того, предложение FOREIGN KEY можно применить явно и заново определить атрибут столбца.You can also explicitly use the FOREIGN KEY clause and restate the column attribute. Обратите внимание, что имена столбцов в обеих таблицах могут различаться.Note that the column name does not have to be the same in both tables.

FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(SalesPersonID)

Ограничения по ключам с несколькими столбцами создаются в виде табличных ограничений.Multicolumn key constraints are created as table constraints. В базе данных AdventureWorks2012AdventureWorks2012 таблица SpecialOfferProduct включает ограничение PRIMARY KEY с несколькими столбцами.In the AdventureWorks2012AdventureWorks2012 database, the SpecialOfferProduct table includes a multicolumn PRIMARY KEY. В следующем примере показано, как обращаться к этому ключу из другой таблицы; задавать имя ограничения явно необязательно.The following example shows how to reference this key from another table; an explicit constraint name is optional.

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

В.C. Использование ограничений UNIQUEUsing UNIQUE constraints

Ограничения UNIQUE используются для указания уникальности непервичных ключевых столбцов.UNIQUE constraints are used to enforce uniqueness on nonprimary key columns. В следующем примере применяется ограничение уникальности столбца Name таблицы Product.The following example enforces a restriction that the Name column of the Product table must be unique.

Name NVARCHAR(100) NOT NULL
UNIQUE NONCLUSTERED

Г.D. Использование определений DEFAULTUsing DEFAULT definitions

Определения DEFAULT (вместе с инструкциями INSERT и UPDATE) позволяют указать значение по умолчанию, используемое, если значение не задано.Defaults supply a value (with the INSERT and UPDATE statements) when no value is supplied. Например, база данных AdventureWorks2012AdventureWorks2012 может включать таблицу уточняющих запросов, содержащую различные должности, которые могут занимать сотрудники компании.For example, the AdventureWorks2012AdventureWorks2012 database could include a lookup table listing the different jobs employees can fill in the company. В столбце, описывающем каждую должность, значение символьной строки по умолчанию может содержать описание, отображаемое, если фактическое описание должности не было введено явно.Under a column that describes each job, a character string default could supply a description when an actual description is not entered explicitly.

DEFAULT 'New Position - title not formalized yet'

Кроме констант, определения DEFAULT могут включать функции.In addition to constants, DEFAULT definitions can include functions. Следующий пример позволяет получить текущую дату для той или иной записи.Use the following example to get the current date for an entry.

DEFAULT (GETDATE())

Обработка функциями без параметров также может повысить целостность данных.A niladic-function scan can also improve data integrity. Чтобы определить пользователя, вставившего строку, используйте функцию без параметров для USER.To keep track of the user that inserted a row, use the niladic-function for USER. Не заключайте функции без параметров в скобки.Do not enclose the niladic-functions with parentheses.

DEFAULT USER

Д.E. Использование ограничений CHECKUsing CHECK constraints

В следующем примере показано ограничение, применяемое к значениям, вводимым в столбец CreditRating таблицы Vendor.The following example shows a restriction made to values that are entered into the CreditRating column of the Vendor table. Ограничение не имеет имени.The constraint is unnamed.

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

В этом примере показано именованное ограничение вводимых в столбец таблицы символьных данных по шаблону.This example shows a named constraint with a pattern restriction on the character data entered into a column of a table.

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

В этом примере указывается, что значения должны входить в заданный список или соответствовать заданному шаблону.This example specifies that the values must be within a specific list or follow a specified pattern.

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

Е.F. Вывод на экран полного определения таблицыShowing the complete table definition

В следующем примере выводятся полные определения таблицы со всеми определениями ограничений для таблицы PurchaseOrderDetail, созданной в базе данных AdventureWorks2012AdventureWorks2012.The following example shows the complete table definitions with all constraint definitions for table PurchaseOrderDetail created in the AdventureWorks2012AdventureWorks2012 database. Обратите внимание, что для выполнения этого образца схема таблицы заменяется на схему dbo.Note that to run the sample, the table schema is changed to dbo.

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

Ж.G. Создание таблицы со столбцом, приведенным к типу коллекции схем XMLCreating a table with an xml column typed to an XML schema collection

В следующем примере создается таблица со столбцом xml, приведенным к типу коллекции схем XML HRResumeSchemaCollection.The following example creates a table with an xml column that is typed to XML schema collection HRResumeSchemaCollection. Ключевое слово DOCUMENT указывает, что каждый экземпляр типа данных xml в столбце column_name может содержать только один элемент верхнего уровня.The DOCUMENT keyword specifies that each instance of the xml data type in column_name can contain only one top-level element.

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

З.H. Создание секционированной таблицыCreating a partitioned table

В следующем примере создается функция секционирования для разделения таблицы или индекса на четыре секции.The following example creates a partition function to partition a table or index into four partitions. Затем создается схема секционирования, определяющая файловые группы, в которых содержится каждая из четырех секций.Then, the example creates a partition scheme that specifies the filegroups in which to hold each of the four partitions. Наконец, создается таблица, использующая схему секционирования.Finally, the example creates a table that uses the partition scheme. В примере предполагается, что в базе данных уже существуют файловые группы.This example assumes the filegroups already exist in the database.

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

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

Секции назначаются на основе столбца col1 таблицы PartitionTable следующими способами.Based on the values of column col1 of PartitionTable, the partitions are assigned in the following ways.

Файловая группаFilegroup test1fgtest1fg test2fgtest2fg test3fgtest3fg test4fgtest4fg
Секция
Partition 11 22 33 44
ЗначенияValues: col 1 <= 1col 1 <= 1 col1 > 1 AND col1 <= 100col1 > 1 AND col1 <= 100 col1 > 100 AND col1 <= 1000col1 > 100 AND col1 <= 1,000 col1 > 1000col1 > 1000

И.I. Использование типа данных uniqueidentifier в столбцеUsing the uniqueidentifier data type in a column

В следующем примере создается таблица со столбцом типа uniqueidentifier.The following example creates a table with a uniqueidentifier column. В этом примере используется ограничение PRIMARY KEY для защиты таблицы от вставки пользователями повторяющихся значений, а также функция NEWSEQUENTIALID() в ограничении DEFAULT для указания значений для новых строк.The example uses a PRIMARY KEY constraint to protect the table against users inserting duplicated values, and it uses the NEWSEQUENTIALID() function in the DEFAULT constraint to provide values for new rows. К столбцу uniqueidentifier применяется свойство ROWGUIDCOL, чтобы на столбец можно было ссылаться с помощью ключевого слова $ROWGUID.The ROWGUIDCOL property is applied to the uniqueidentifier column so that it can be referenced using the $ROWGUID keyword.

CREATE TABLE dbo.Globally_Unique_Data
(
    GUID UNIQUEIDENTIFIER
        CONSTRAINT Guid_Default DEFAULT
        NEWSEQUENTIALID() ROWGUIDCOL,
    Employee_Name VARCHAR(60)
    CONSTRAINT Guid_PK PRIMARY KEY (GUID)
);

К.J. Использование выражения для вычисляемого столбцаUsing an expression for a computed column

В следующем примере показано использование выражения ((low + high)/2) для вычисления столбца myavg.The following example shows the use of an expression ((low + high)/2) for calculating the myavg computed column.

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

Л.K. Создание вычисляемого столбца на основе столбца определяемого пользователем типаCreating a computed column based on a user-defined type column

В следующем примере создается таблица с одним столбцом, имеющим определяемый пользовательским тип utf8string, и предполагается, что как сборка, содержащая данный тип, так и сам тип, уже созданы в текущей базе данных.The following example creates a table with one column defined as user-defined type utf8string, assuming that the type's assembly, and the type itself, have already been created in the current database. Второй столбец определяется на основе типа utf8string и использует метод ToString() типа type(class) utf8string для вычисления значения столбца.A second column is defined based on , and uses method of type(class) to compute a value for the column.

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

М.L. Использование функции USER_NAME для вычисляемого столбцаUsing the USER_NAME function for a computed column

В следующем примере используется функция USER_NAME() в столбце myuser_name.The following example uses the USER_NAME() function in the myuser_name column.

CREATE TABLE dbo.mylogintable
(
    date_in DATETIME,
    user_id INT,
    myuser_name AS USER_NAME()
);

Н.M. Создание таблицы со столбцом FILESTREAMCreating a table that has a FILESTREAM column

В следующем примере создается таблица со столбцом FILESTREAM``Photo.The following example creates a table that has a FILESTREAM column Photo. Если таблица содержит один или более столбцов FILESTREAM, она должна содержать столбец ROWGUIDCOL.If a table has one or more FILESTREAM columns, the table must have one ROWGUIDCOL column.

CREATE TABLE dbo.EmployeePhoto
(
    EmployeeId INT NOT NULL PRIMARY KEY,
    Photo VARBINARY(MAX) FILESTREAM NULL,
    MyRowGuidColumn UNIQUEIDENTIFIER NOT NULL ROWGUIDCOL UNIQUE DEFAULT NEWID()
);

О.N. О. Создание таблицы, использующей сжатие строкCreating a table that uses row compression

В следующем примере создается таблица, использующая сжатие строк.The following example creates a table that uses row compression.

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

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

П.O. Создание таблицы с разреженными столбцами и набором столбцовCreating a table that has sparse columns and a column set

В следующих примерах показано создание таблицы с разреженным столбцом и таблицы с двумя разреженными столбцами и набором столбцов.The following examples show to how to create a table that has a sparse column, and a table that has two sparse columns and a column set. В примерах используется основной синтаксис.The examples use the basic syntax. Более сложные примеры см. в разделе Использование разреженных столбцов и Использование наборов столбцов.For more complex examples, see Use Sparse Columns and Use Column Sets.

В следующем примере создается таблица с разреженным столбцом.This example creates a table that has a sparse column.

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

В этом примере создается таблица с двумя разреженными столбцами и набором столбцов с именем CSet.This example creates a table that has two sparse columns and a column set named CSet.

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

Т.P. Создание темпоральной таблицы на основе диска с системным управлением версиямиCreating a system-versioned disk-based temporal table

Применимо к: SQL Server 2016 (13.x);SQL Server 2016 (13.x) и выше, а также База данных SQL AzureAzure SQL Database. Applies to: and later and .

В следующих примерах показано, как создать темпоральную таблицу, привязанную к новой таблице журнала, и как создать темпоральную таблицу, привязанную к существующей таблице журнала.The following examples show how to create a temporal table linked to a new history table, and how to create a temporal table linked to an existing history table. Для темпоральной таблицы должен быть определен первичный ключ, чтобы включить системное управление версиями.Note that the temporal table must have a primary key defined to be enabled for the table to be enabled for system versioning. Примеры добавления или удаления системного управления версиями в существующей таблице см. в главе Примеры в разделе "Системное управление версиями".For examples showing how to add or remove system versioning on an existing table, see System Versioning in Examples. Варианты использования описаны в разделе Темпоральные таблицы.For use cases, see Temporal Tables.

В этом примере создается новая темпоральная таблица, привязанная к новой таблице журнала.This example creates a new temporal table linked to a new history table.

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

В этом примере создается новая темпоральная таблица, привязанная к существующей таблице журнала.This example creates a new temporal table linked to an existing history table.

-- Existing table
CREATE TABLE Department_History
(
    DepartmentNumber CHAR(10) NOT NULL,
    DepartmentName VARCHAR(50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR(10) NULL,
    SysStartTime DATETIME2 NOT NULL,
    SysEndTime DATETIME2 NOT NULL
);

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

У.Q. Создание оптимизированной для памяти темпоральной таблицы с системным управлением версиямиCreating a system-versioned memory-optimized temporal table

Применимо к: SQL Server 2016 (13.x);SQL Server 2016 (13.x) и выше, а также База данных SQL AzureAzure SQL Database. Applies to: and later and .

В следующем примере показано, как создать оптимизированную для памяти темпоральную таблицу с системным управлением версиями, привязанную к новой таблице журнала на диске.The following example shows how to create a system-versioned memory-optimized temporal table linked to a new disk-based history table.

В этом примере создается новая темпоральная таблица, привязанная к новой таблице журнала.This example creates a new temporal table linked to a new history table.

CREATE SCHEMA History;
GO

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

В этом примере создается новая темпоральная таблица, привязанная к существующей таблице журнала.This example creates a new temporal table linked to an existing history table.

-- Existing table
CREATE TABLE Department_History
(
    DepartmentNumber CHAR(10) NOT NULL,
    DepartmentName VARCHAR(50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR(10) NULL,
    SysStartTime DATETIME2 NOT NULL,
    SysEndTime DATETIME2 NOT NULL
);

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

Ф.R. Создание таблицы с зашифрованными столбцамиCreating a table with encrypted columns

В следующем примере создается таблица с двумя зашифрованными столбцами.The following example creates a table with two encrypted columns. Дополнительные сведения см. в разделе Постоянное шифрование.For more information, see Always Encrypted:

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

Х.S. Создание встроенного фильтруемого индексаCreate an inline filtered index

В этом примере создается таблица со встроенным фильтруемым индексом.Creates a table with an inline filtered index.

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

T.T. Создание встроенного индексаCreate an inline index

В приведенном ниже примере показано использование встроенного параметра NONCLUSTERED для дисковых таблиц.The following shows how to use NONCLUSTERED inline for disk-based tables:

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

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

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

Ф.U. Создание временной таблицы с анонимным составным первичным ключом.Create a temporary table with an anonymously named compound primary key

В примере создается таблица с анонимным составным первичным ключом.Creates a table with an anonymously named compound primary key. Это полезно для предотвращения конфликтов во время выполнения, если две временные таблицы, областью действия которых являются сеансы (каждая в отдельном сеансе), используют одно и то же имя для ограничения.This is useful to avoid run-time conflicts where two session-scoped temp tables, each in a separate session, use the same name for a constraint.

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

Если вы явным образом именуете ограничение, во втором сеансе возникнет ошибка, например:If you explicitly name the constraint, the second session will generate an error such as:

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

Причина проблемы в том, что имя временной таблицы уникально, а имена ограничений — нет.The problem arises from the fact that while the temp table name is uniquified, the constraint names are not.

V.V. Использование глобальных временных таблиц в базе данных SQL AzureUsing global temporary tables in Azure SQL Database

В сеансе A создается глобальная временная таблица ##test в База данных SQL AzureAzure SQL Database testdb1 и добавляется 1 строка.Session A creates a global temp table ##test in База данных SQL AzureAzure SQL Database testdb1 and adds 1 row

CREATE TABLE ##test (
    a INT,
    b INT
);

INSERT INTO ##test
VALUES (1, 1);

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

Результирующий набор:Here is the result set.

1253579504

Получаем имя глобальной временной таблицы для идентификатора объекта 1253579504 в tempdb (2)Obtain global temp table name for a given object ID 1253579504 in tempdb (2)

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

Результирующий набор:Here is the result set.

##test

В сеансе B устанавливается подключение к База данных SQL AzureAzure SQL Database testdb1 и доступ к таблице ##test, созданной в сеансе A.Session B connects to База данных SQL AzureAzure SQL Database testdb1 and can access table ##test created by session A

SELECT * FROM ##test;

Результирующий набор:Here is the result set.

1, 1

В сеансе C устанавливается подключение к другой базе данных База данных SQL AzureAzure SQL Database testdb2 и выполняется попытка получить доступ к таблице ##test, созданной в базе данных testdb1.Session C connects to another database in База данных SQL AzureAzure SQL Database testdb2 and wants to access ##test created in testdb1. Это невозможно, поскольку глобальные временные таблицы существуют в области базы данныхThis select fails due to the database scope for the global temp tables

SELECT * FROM ##test

В результате выдается следующая ошибка:Which generates the following error:

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

Обращение к системному объекту в База данных SQL AzureAzure SQL Database tempdb из текущей базы данных пользователя testdb1.Addressing system object in База данных SQL AzureAzure SQL Database tempdb from current user database testdb1

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

Дальнейшие действияNext steps