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

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Cria uma nova tabela no SQL ServerSQL Server e no Banco de dados SQL do AzureAzure SQL Database.Creates a new table in SQL ServerSQL Server and Banco de dados SQL do AzureAzure SQL Database.

Observação

Para sintaxe SQL Data WarehouseSQL Data Warehouse, veja CREATE TABLE (SQL Data Warehouse do Azure).For SQL Data WarehouseSQL Data Warehouse syntax, see CREATE TABLE (Azure SQL Data Warehouse).

Ícone de link do tópico Convenções de sintaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

Sintaxe simplesSimple 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 ] )
[ ; ]

Sintaxe completaFull Syntax

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

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

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

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

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

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

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

ArgumentosArguments

database_name É o nome do banco de dados no qual a tabela é criada.database_name Is the name of the database in which the table is created. database_name precisa especificar o nome de um banco de dados existente.database_name must specify the name of an existing database. Caso não seja especificado, database_name usará o banco de dados atual como padrão.If not specified, database_name defaults to the current database. O logon para a conexão atual precisa estar associado a uma ID de usuário existente no banco de dados especificado por database_name, e essa ID de usuário precisa ter permissões 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 É o nome do esquema ao qual a nova tabela pertence.schema_name Is the name of the schema to which the new table belongs.

table_name É o nome da nova tabela.table_name Is the name of the new table. Os nomes de tabela precisam seguir as regras para identificadores.Table names must follow the rules for identifiers. table_name pode ter no máximo 128 caracteres, exceto para nomes de tabelas temporárias locais [nomes com o prefixo de sinal numérico (#)], que não podem exceder 116 caracteres.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 Aplica-se a: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) e posterior).AS FileTable Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later).

Cria a nova tabela como uma FileTable.Creates the new table as a FileTable. Você não especifica colunas porque uma FileTable tem um esquema fixo.You do not specify columns because a FileTable has a fixed schema. Para obter mais informações, confira FileTables.For more information, see FileTables.

column_name computed_column_expression É uma expressão que define o valor de uma coluna computada.column_name computed_column_expression Is an expression that defines the value of a computed column. Uma coluna computada é uma coluna virtual que não está fisicamente armazenada na tabela, a menos que a coluna esteja marcada como PERSISTED.A computed column is a virtual column that is not physically stored in the table, unless the column is marked PERSISTED. A coluna é computada a partir de uma expressão que usa outras colunas da mesma tabela.The column is computed from an expression that uses other columns in the same table. Por exemplo, uma coluna computada pode ter a definição: cost AS price * qty. A expressão pode ser o nome de uma coluna não computada, constante, função, variável e qualquer combinação dessas, conectada por um ou mais operadores.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. A expressão não pode ser uma subconsulta nem conter um tipo de dados do alias.The expression cannot be a subquery or contain alias data types.

As colunas computadas podem ser usadas em listas de seleção, cláusulas WHERE, cláusulas ORDER BY ou em qualquer outro local em que expressões regulares possam ser usadas, com as seguintes exceções: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:

  • As colunas computadas devem ser marcadas como PERSISTED para participar de uma restrição FOREIGN KEY ou CHECK.Computed columns must be marked PERSISTED to participate in a FOREIGN KEY or CHECK constraint.

  • Uma coluna computada poderá ser usada como uma coluna de chave em um índice ou como parte de uma restrição PRIMARY KEY ou UNIQUE, se o valor for definido por uma expressão determinística e o tipo de dados do resultado for permitido nas colunas de índice.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.

    Por exemplo, se a tabela tiver as colunas de inteiros a e b, a coluna computada a+b poderá ser indexada, mas não a coluna computada a+DATEPART(dd, GETDATE()) , pois o valor poderá ser alterado em chamadas subsequentes.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.

  • Uma coluna computada não pode ser o destino de uma instrução INSERT ou UPDATE.A computed column cannot be the target of an INSERT or UPDATE statement.

Observação

Cada linha de uma tabela pode ter valores diferentes para as colunas envolvidas em uma coluna computada; sendo assim, a coluna computada pode não ter o mesmo valor para cada linha.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.

Com base nas expressões usadas, o Mecanismo de Banco de DadosDatabase Engine determina automaticamente a nulidade das colunas computadas.Based on the expressions that are used, the nullability of computed columns is determined automatically by the Mecanismo de Banco de DadosDatabase Engine. O resultado da maioria das expressões será considerado nulo mesmo se somente colunas não nulas estejam presentes, pois a falta de fluxo ou excesso de fluxo produzirá também resultados 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. Use a função COLUMNPROPERTY com a propriedade AllowsNull para investigar a nulidade de qualquer coluna computada de uma tabela.Use the COLUMNPROPERTY function with the AllowsNull property to investigate the nullability of any computed column in a table. Uma expressão que permite valor nulo pode se tornar uma expressão que não permite valor nulo pela especificação de ISNULL com a constante check_expression, em que a constante é um valor não nulo substituído para qualquer resultado 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. A permissão REFERENCES no tipo é necessária para colunas computadas com base em expressões do tipo de dados CLR definido pelo usuário.REFERENCES permission on the type is required for computed columns based on common language runtime (CLR) user-defined type expressions.

PERSISTED Especifica que o Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine armazenará fisicamente os valores computados na tabela e atualizará os valores quando for atualizada qualquer outra coluna da qual a coluna computada depende.PERSISTED Specifies that the Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine will physically store the computed values in the table, and update the values when any other columns on which the computed column depends are updated. A marcação de uma coluna computada como PERSISTED permite a criação de um índice em uma coluna computada que seja determinística, mas não precisa.Marking a computed column as PERSISTED lets you create an index on a computed column that is deterministic, but not precise. Para obter mais informações, consulte Indexes on Computed Columns.For more information, see Indexes on Computed Columns. As colunas computadas usadas como colunas de particionamento de uma tabela particionada precisam ser explicitamente marcadas como PERSISTED.Any computed columns that are used as partitioning columns of a partitioned table must be explicitly marked PERSISTED. computed_column_expression precisa ser determinística quando PERSISTED é especificado.computed_column_expression must be deterministic when PERSISTED is specified.

ON { partition_scheme | filegroup | "default" } Especifica o esquema de partição ou o grupo de arquivos no qual a tabela está armazenada.ON { partition_scheme | filegroup | "default" } Specifies the partition scheme or filegroup on which the table is stored. Se partition_scheme for especificado, a tabela será uma tabela particionada cujas partições são armazenadas em um conjunto de um ou mais grupos de arquivos especificados em 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. Se filegroup for especificado, a tabela será criada no grupo de arquivos nomeado.If filegroup is specified, the table is stored in the named filegroup. O grupo de arquivos deve existir no banco de dados.The filegroup must exist within the database. Se "default" for especificado ou se ON não for especificado, a tabela será armazenada no grupo de arquivos padrão.If "default" is specified, or if ON is not specified at all, the table is stored on the default filegroup. O mecanismo de armazenamento de uma tabela como especificado em CREATE TABLE não pode ser alterado posteriormente.The storage mechanism of a table as specified in CREATE TABLE cannot be subsequently altered.

ON {partition_scheme | filegroup | "default" } também pode ser especificado em uma restrição PRIMARY KEY ou UNIQUE.ON {partition_scheme | filegroup | "default"} can also be specified in a PRIMARY KEY or UNIQUE constraint. Essas restrições criam índices.These constraints create indexes. Se filegroup for especificado, o índice será armazenado no grupo de arquivos nomeado.If filegroup is specified, the index is stored in the named filegroup. Se "default" for especificado ou se ON não for especificado, o índice será armazenado no mesmo grupo de arquivos da tabela.If "default" is specified, or if ON is not specified at all, the index is stored in the same filegroup as the table. Se a restrição PRIMARY KEY ou UNIQUE criar um índice clusterizado, as páginas de dados da tabela serão armazenadas no mesmo grupo de arquivos do índice.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. Se CLUSTERED for especificado ou se a restrição de outra forma criar um índice clusterizado e for especificado um partition_scheme diferente do partition_scheme ou do filegroup da definição da tabela ou vice-versa, somente a definição da restrição será respeitada e as demais serão ignoradas.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.

Observação

Nesse contexto, default não é uma palavra-chave.In this context, default is not a keyword. É um identificador para o grupo de arquivos padrão e precisa ser delimitado, como em ON "default" ou ON [ default ] .It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [ default ]. Se "default" é especificado, a opção QUOTED_IDENTIFIER deve ser definida como ON na sessão atual.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Essa é a configuração padrão.This is the default setting. Para saber mais, confira SET QUOTED_IDENTIFIER.For more information, see SET QUOTED_IDENTIFIER.

Depois de criar uma tabela particionada, considere a configuração da opção LOCK_ESCALATION da tabela como AUTO.After you create a partitioned table, consider setting the LOCK_ESCALATION option for the table to AUTO. Isso pode melhorar a simultaneidade ao permitir que os bloqueios escalem para o nível da partição (HoBT) em vez da tabela.This can improve concurrency by enabling locks to escalate to partition (HoBT) level instead of the table. Para obter mais informações, consulte ALTER TABLE.For more information, see ALTER TABLE.

TEXTIMAGE_ON { filegroup| "default" } Indica que text, ntext, image, xml, varchar(max) , nvarchar(max) , varbinary(max) e colunas do tipo de dado CLR definido pelo usuário (incluindo geometry e geography) são armazenados no grupo de arquivos especificado.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 não será permitido se não houver colunas de valor grande na tabela.TEXTIMAGE_ON is not allowed if there are no large value columns in the table. TEXTIMAGE_ON não poderá ser especificado se partition_scheme for especificado.TEXTIMAGE_ON cannot be specified if partition_scheme is specified. Se "default" for especificado ou se TEXTIMAGE_ON não for especificado, as colunas de valores grandes serão armazenadas no grupo de arquivos padrão.If "default" is specified, or if TEXTIMAGE_ON is not specified at all, the large value columns are stored in the default filegroup. O armazenamento de qualquer dado de coluna de valor grande especificado em CREATE TABLE não poderá ser alterado posteriormente.The storage of any large value column data specified in CREATE TABLE cannot be subsequently altered.

Observação

Varchar(max), nvarchar(max), varbinary(max), xml e valores UDT grandes são armazenados diretamente na linha de dados, até um limite de 8.000 bytes, desde que o valor caiba no registro.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. Se o valor não se ajustar ao registro, um ponteiro será armazenado na linha e o restante será armazenado fora da linha no espaço de armazenamento de 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 é o valor padrão, que indica que todos os valores são armazenados diretamente na linha de dados.0 is the default value, which indicates that all values are stored directly in the data row.

TEXTIMAGE_ON somente altera o local do "espaço de armazenamento LOB", não afetando o momento em que os dados são armazenados na linha.TEXTIMAGE_ON only changes the location of the "LOB storage space", it does not affect when data is stored in-row. Use tipos de valor grande sem a opção de linha de sp_tableoption para armazenar todo o valor LOB fora da linha.Use large value types out of row option of sp_tableoption to store the entire LOB value out of the row.

Nesse contexto, default não é uma palavra-chave.In this context, default is not a keyword. É um identificador para o grupo de arquivos padrão e precisa ser delimitado, como em TEXTIMAGE_ON "default" ou TEXTIMAGE_ON [default].It is an identifier for the default filegroup and must be delimited, as in TEXTIMAGE_ON "default" or TEXTIMAGE_ON [default]. Se "default" é especificado, a opção QUOTED_IDENTIFIER deve ser definida como ON na sessão atual.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Essa é a configuração padrão.This is the default setting. Para saber mais, confira SET QUOTED_IDENTIFIER.For more information, see SET QUOTED_IDENTIFIER.

FILESTREAM_ON { partition_scheme_name | filegroup | " default " }FILESTREAM_ON { partition_scheme_name | filegroup | " default " }
Aplica-se a: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 e posterior).Applies to: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 and later). Banco de dados SQL do AzureAzure SQL Database não dá suporte para FILESTREAM.does not support FILESTREAM.

Especifica o grupo de arquivos para obter dados de FILESTREAM.Specifies the filegroup for FILESTREAM data.

Se a tabela contiver dados FILESTREAM e estiver particionada, a cláusula FILESTREAM_ON deverá ser incluída e especificar um esquema de partição de grupos de arquivos FILESTREAM.If the table contains FILESTREAM data and the table is partitioned, the FILESTREAM_ON clause must be included and must specify a partition scheme of FILESTREAM filegroups. Esse esquema de partição deve usar a mesma função de partição e as colunas de partição do esquema de partição da tabela; caso contrário, ocorrerá um erro.This partition scheme must use the same partition function and partition columns as the partition scheme for the table; otherwise, an error is raised.

Se a tabela não estiver particionada, a coluna FILESTREAM não poderá ser particionada.If the table is not partitioned, the FILESTREAM column cannot be partitioned. Dados FILESTREAM da tabela devem ser armazenados em um único grupo de arquivos.FILESTREAM data for the table must be stored in a single filegroup. Esse grupo de arquivos é especificado na cláusula FILESTREAM_ON.This filegroup is specified in the FILESTREAM_ON clause.

Se a tabela não estiver particionada e a cláusula FILESTREAM_ON não for especificada, será usado o grupo de arquivos FILESTREAM cuja propriedade DEFAULT está definida.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. Se não houver um grupo de arquivos FILESTREAM, ocorrerá um erro.If there is no FILESTREAM filegroup, an error is raised.

Como ocorre com ON e TEXTIMAGE_ON, o valor definido por meio CREATE TABLE para FILESTREAM_ON não pode ser alterado, exceto nos seguintes casos:As with ON and TEXTIMAGE_ON, the value set by using CREATE TABLE for FILESTREAM_ON cannot be changed, except in the following cases:

  • Uma instrução CREATE INDEX converte um heap em um índice clusterizado.A CREATE INDEX statement converts a heap into a clustered index. Nesse caso, um outro grupo de arquivos FILESTREAM, um esquema de partição ou NULL pode ser especificado.In this case, a different FILESTREAM filegroup, partition scheme, or NULL can be specified.
  • Uma instrução DROP INDEX converte um índice clusterizado em um heap.A DROP INDEX statement converts a clustered index into a heap. Neste caso, outro grupo de arquivos FILESTREAM, um esquema de partição ou "default" pode ser especificado.In this case, a different FILESTREAM filegroup, partition scheme, or "default" can be specified.

O grupo de arquivos da cláusula FILESTREAM_ON <filegroup>, ou cada grupo de arquivos FILESTREAM nomeado no esquema de partição, deve ter um arquivo definido para o grupo de arquivos.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. Esse arquivo deve ser definido usando uma instrução CREATE DATABASE ou ALTER DATABASE; caso contrário, ocorrerá um erro.This file must be defined by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

Para tópicos sobre FILESTREAM relacionados, veja Objeto Binário Grande – Dados de Blob.For related FILESTREAM topics, see Binary Large Object - Blob Data.

[ type_schema_name .[ type_schema_name. ] type_name ] type_name
Especifica o tipo de dados da coluna e o esquema ao qual ele pertence.Specifies the data type of the column, and the schema to which it belongs. Para tabelas com base em disco, o tipo de dados pode ser um dos seguintes:For disk-based tables, the data type can be one of the following:

  • Um tipo de dados do sistemaA system data type
  • Um tipo de alias com base em um tipo de dados do sistema do SQL ServerSQL Server.An alias type based on a SQL ServerSQL Server system data type. Os tipos de dados do alias são criados com a instrução CREATE TYPE antes que possam ser usados em uma definição de tabela.Alias data types are created with the CREATE TYPE statement before they can be used in a table definition. A atribuição NULL ou NOT NULL para um tipo de dados do alias pode ser substituída durante a instrução CREATE TABLE.The NULL or NOT NULL assignment for an alias data type can be overridden during the CREATE TABLE statement. Contudo, não é possível alterar a especificação do tamanho; o tamanho de um tipo de dados do alias não pode ser especificado na instrução CREATE TABLE.However, the length specification cannot be changed; the length for an alias data type cannot be specified in a CREATE TABLE statement.
  • Um tipo de dados CLR definido pelo usuário.A CLR user-defined type. Os tipos de dados CLR definidos pelo usuário são criados com a instrução CREATE TYPE antes que possam ser usados em uma definição de tabela.CLR user-defined types are created with the CREATE TYPE statement before they can be used in a table definition. Para criar uma coluna baseada em um tipo de dados CLR definido pelo usuário, é necessária a permissão REFERENCES para o tipo.To create a column on CLR user-defined type, REFERENCES permission is required on the type.

Se type_schema_name não for especificado, p Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine fará referência a type_name na seguinte ordem:If type_schema_name is not specified, the Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine references type_name in the following order:

  • O tipo de dados de sistema SQL ServerSQL Server.The SQL ServerSQL Server system data type.
  • O esquema padrão do usuário atual no banco de dados atual.The default schema of the current user in the current database.
  • O esquema dbo no banco de dados atual.The dbo schema in the current database.

Para tabelas com otimização de memória, veja Tipos de dados compatíveis para OLTP in-memory para obter uma lista dos tipos de sistema compatíveis.For memory-optimized tables, see Supported Data Types for In-Memory OLTP for a list of supported system types.

precision precision
É a precisão do tipo de dados especificado.Is the precision for the specified data type. Para obter mais informações sobre valores de precisão válidos, veja Precisão, escala e comprimento.For more information about valid precision values, see Precision, Scale, and Length.

scale scale
É a escala do tipo de dados especificado.Is the scale for the specified data type. Para obter mais informações sobre valores de escala válidos, veja Precisão, escala e comprimento.For more information about valid scale values, see Precision, Scale, and Length.

max max
Aplica-se apenas aos tipos de dados varchar, nvarchar e varbinary para armazenar 2^31 bytes de caractere e dados binários e 2^30 bytes de dados Unicode.Applies only to the varchar, nvarchar, and varbinary data types for storing 2^31 bytes of character and binary data, and 2^30 bytes of Unicode data.

CONTENTCONTENT
Especifica que cada instância do tipo de dados xml em column_name pode conter vários elementos de nível superior.Specifies that each instance of the xml data type in column_name can contain multiple top-level elements. CONTENT aplica-se apenas a tipo de dados xml e poderá ser especificado somente se xml_schema_collection também for especificado.CONTENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified. Caso não seja especificado, CONTENT será o comportamento padrão.If not specified, CONTENT is the default behavior.

DOCUMENTDOCUMENT
Especifica que cada instância do tipo de dados xml em column_name pode conter apenas um elemento de nível superior.Specifies that each instance of the xml data type in column_name can contain only one top-level element. DOCUMENT aplica-se apenas a tipo de dados xml e poderá ser especificado somente se xml_schema_collection também for especificado.DOCUMENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified.

xml_schema_collection xml_schema_collection
Aplica-se apenas ao tipo de dados xml para associar uma coleção de esquemas XML ao tipo.Applies only to the xml data type for associating an XML schema collection with the type. Antes de digitar uma coluna xml em um esquema, o esquema deve ser criado primeiramente no banco de dados com CREATE XML SCHEMA COLLECTION.Before typing an xml column to a schema, the schema must first be created in the database by using CREATE XML SCHEMA COLLECTION.

DEFAULTDEFAULT
Especifica o valor fornecido para a coluna quando um valor não for fornecido explicitamente durante uma inserção.Specifies the value provided for the column when a value is not explicitly supplied during an insert. As definições de DEFAULT podem ser aplicadas a qualquer coluna, com exceção daquelas definidas como timestamp ou daquelas com a propriedade IDENTITY.DEFAULT definitions can be applied to any columns except those defined as timestamp, or those with the IDENTITY property. Se um valor padrão for especificado para uma coluna de tipo definido pelo usuário, o tipo deverá ser compatível com uma conversão implícita de constant_expression para o tipo definido pelo usuário.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. As definições DEFAULT serão removidas quando a tabela for descartada.DEFAULT definitions are removed when the table is dropped. Somente um valor constante, como uma cadeia de caracteres, uma função de escalar (seja de sistema, definida pelo usuário ou CLR) ou NULL, pode ser usado como padrão.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. Para manter a compatibilidade com versões anteriores do SQL ServerSQL Server, um nome de restrição pode ser atribuído a um DEFAULT.To maintain compatibility with earlier versions of SQL ServerSQL Server, a constraint name can be assigned to a DEFAULT.

constant_expression constant_expression
É uma constante, NULL ou uma função de sistema usada como o valor padrão da coluna.Is a constant, NULL, or a system function that is used as the default value for the column.

memory_optimized_constant_expression memory_optimized_constant_expression
É uma constante, NULL, ou uma função de sistema com suporte usada como o valor padrão da coluna.Is a constant, NULL, or a system function that is supported in used as the default value for the column. Deve haver suporte nos procedimentos armazenados compilados de modo nativo.Must be supported in natively compiled stored procedures. Para obter mais informações sobre as funções integradas em procedimentos armazenados compilados nativamente, veja Recursos compatíveis em módulos T-SQL compilados nativamente.For more information about built-in functions in natively compiled stored procedures, see Supported Features for Natively Compiled T-SQL Modules.

IDENTITYIDENTITY
Indica que a nova coluna é uma coluna de identidade.Indicates that the new column is an identity column. Quando uma nova linha é adicionada à tabela, o Mecanismo de Banco de DadosDatabase Engine fornece um valor incremental exclusivo para a coluna.When a new row is added to the table, the Mecanismo de Banco de DadosDatabase Engine provides a unique, incremental value for the column. Geralmente, as colunas de identidade são usadas com restrições PRIMARY KEY para servir como o identificador exclusivo de linha para a tabela.Identity columns are typically used with PRIMARY KEY constraints to serve as the unique row identifier for the table. A propriedade IDENTITY pode ser atribuída às colunas tinyint, smallint, int, bigint, decimal(p,0) ou numeric(p,0) .The IDENTITY property can be assigned to tinyint, smallint, int, bigint, decimal(p,0), or numeric(p,0) columns. Apenas uma coluna de identidade pode ser criada por tabela.Only one identity column can be created per table. Padrões associados e restrições DEFAULT não podem ser usados com uma coluna de identidade.Bound defaults and DEFAULT constraints cannot be used with an identity column. Devem ser especificados tanto o valor de semente como o de incremento ou nenhum dos dois.Both the seed and increment or neither must be specified. Se nenhum for especificado, o padrão será (1,1).If neither is specified, the default is (1,1).

seed seed
É o valor usado para a primeira linha carregada na tabela.Is the value used for the very first row loaded into the table.

increment increment
É o valor de incremento adicionado ao valor de identidade da linha anterior carregada.Is the incremental value added to the identity value of the previous row loaded.

NOT FOR REPLICATIONNOT FOR REPLICATION
Na instrução CREATE TABLE, a cláusula NOT FOR REPLICATION pode ser especificada para a propriedade IDENTITY e para restrições FOREIGN KEY e CHECK.In the CREATE TABLE statement, the NOT FOR REPLICATION clause can be specified for the IDENTITY property, FOREIGN KEY constraints, and CHECK constraints. Se essa cláusula for especificada para a propriedade IDENTITY, os valores não serão incrementados em colunas de identidade quando os agentes de replicação executarem inserções.If this clause is specified for the IDENTITY property, values are not incremented in identity columns when replication agents perform inserts. Se essa cláusula for especificada para uma restrição, ela não será aplicada quando os agentes de replicação executarem operações insert, update ou delete.If this clause is specified for a constraint, the constraint is not enforced when replication agents perform insert, update, or delete operations.

GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] [ NOT NULL ]GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] [ NOT NULL ]
Aplica-se a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) e posterior) e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later) and Banco de dados SQL do AzureAzure SQL Database.

Especifica que uma coluna datetime2 especificada será usada pelo sistema para registrar a hora de início na qual um registro é válido ou a hora de término na qual um registro é válido.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. A coluna precisa ser definida como NOT NULL.The column must be defined as NOT NULL. Se você tentar especificá-las como NULL, o sistema gerará um erro.If you attempt to specify them as NULL, the system will throw an error. Se você não especificar explicitamente NOT NULL para uma coluna de período, o sistema definirá a coluna como NOT NULL por padrão.If you do not explicitly specify NOT NULL for a period column, the system will define the column as NOT NULL by default. Use esse argumento junto com os argumentos PERIOD FOR SYSTEM_TIME e WITH SYSTEM_VERSIONING = ON para habilitar o controle de versão do sistema em uma tabela.Use this argument in conjunction with the PERIOD FOR SYSTEM_TIME and WITH SYSTEM_VERSIONING = ON arguments to enable system versioning on a table. Para saber mais, veja Temporal Tables.For more information, see Temporal Tables.

Você pode marcar uma ou ambas as colunas de período com o sinalizador HIDDEN para implicitamente ocultar essas colunas, de modo que SELECT * FROM <table> não retorne um valor para essas colunas.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. Por padrão, as colunas de período não ficam ocultas.By default, period columns are not hidden. Para serem usadas, colunas ocultas devem ser explicitamente incluídas em todas as consultas que fazem referência direta à tabela temporal.In order to be used, hidden columns must be explicitly included in all queries that directly reference the temporal table. Para alterar o atributo HIDDEN para uma coluna de período existente, PERIOD deve ser descartado e recriado com um sinalizador oculto diferente.To change the HIDDEN attribute for an existing period column, PERIOD must be dropped and recreated with a different hidden flag.

INDEX nome_do_índice [ CLUSTERED | NONCLUSTERED ] (nome_da_coluna [ ASC | DESC ] [ ,... n ] )INDEX index_name [ CLUSTERED | NONCLUSTERED ] (column_name [ ASC | DESC ] [ ,... n ] )
Aplica-se a: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) e posterior) e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later) and Banco de dados SQL do AzureAzure SQL Database.

Especifica a criação de um índice na tabela.Specifies to create an index on the table. Isso pode ser um índice clusterizado ou um índice não clusterizado.This can be a clustered index, or a nonclustered index. O índice conterá as colunas listadas e classificará os dados em ordem crescente ou decrescente.The index will contain the columns listed, and will sort the data in either ascending or descending order.

INDEX index_name CLUSTERED COLUMNSTOREINDEX index_name CLUSTERED COLUMNSTORE
Aplica-se a: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) e posterior) e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later) and Banco de dados SQL do AzureAzure SQL Database.

Especifica o armazenamento de toda a tabela em formato de coluna com um índice columnstore clusterizado.Specifies to store the entire table in columnar format with a clustered columnstore index. Isso sempre inclui todas as colunas na tabela.This always includes all columns in the table. Os dados não estão classificados em ordem alfabética ou numérica, uma vez que as linhas são organizadas para obter benefícios de compactação de columnstore.The data is not sorted in alphabetical or numeric order since the rows are organized to gain columnstore compression benefits.

INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )
Aplica-se a: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) e posterior) e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later) and Banco de dados SQL do AzureAzure SQL Database.

Especifica a criação de um índice não clusterizado columnstore na tabela.Specifies to create a nonclustered columnstore index on the table. A tabela subjacente pode ser um heap rowstore ou um índice clusterizado, ou pode ser um índice columnstore clusterizado.The underlying table can be a rowstore heap or clustered index, or it can be a clustered columnstore index. Em todos os casos, a criação de um índice columnstore não clusterizado em uma tabela armazena uma segunda cópia dos dados para as colunas no índice.In all cases, creating a nonclustered columnstore index on a table stores a second copy of the data for the columns in the index.

O índice columnstore não clusterizado é armazenado e gerenciado como um índice columnstore clusterizado.The nonclustered columnstore index is stored and managed as a clustered columnstore index. Isso é chamado de índice columnstore não clusterizado porque as colunas podem ser limitadas e existem como um índice secundário em uma tabela.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)
Especifica o esquema de partição que define os grupos de arquivos nos quais as partições de um índice particionado serão mapeadas.Specifies the partition scheme that defines the filegroups onto which the partitions of a partitioned index will be mapped. O esquema de partição deve existir no banco de dados com a execução de CREATE PARTITION SCHEME ou ALTER PARTITION SCHEME.The partition scheme must exist within the database by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. column_name especifica a coluna com relação à qual um índice particionado será particionado.column_name specifies the column against which a partitioned index will be partitioned. Essa coluna precisa corresponder ao tipo de dados, ao comprimento e à precisão do argumento da função de partição que partition_scheme_name está usando.This column must match the data type, length, and precision of the argument of the partition function that partition_scheme_name is using. column_name não é restrito às colunas na definição de índice.column_name is not restricted to the columns in the index definition. Qualquer coluna da tabela base pode ser especificada, exceto que, ao particionar um índice UNIQUE, column_name deve ser escolhido entre aqueles usados como chave exclusiva.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. Essa restrição permite ao Mecanismo de Banco de DadosDatabase Engine verificar a exclusividade de valores de chave em uma única partição apenas.This restriction allows the Mecanismo de Banco de DadosDatabase Engine to verify uniqueness of key values within a single partition only.

Observação

Ao particionar um índice clusterizado não exclusivo, por padrão, o Mecanismo de Banco de DadosDatabase Engine adiciona a coluna de particionamento à lista de chaves de índices clusterizados, se ela já não estiver especificada.When you partition a non-unique, clustered index, the Mecanismo de Banco de DadosDatabase Engine by default adds the partitioning column to the list of clustered index keys, if it is not already specified. Ao particionar um índice não clusterizado e não exclusivo, o Mecanismo de Banco de DadosDatabase Engine adiciona a coluna de particionamento como uma coluna não chave (incluída) do índice, se ela já não estiver especificada.When partitioning a non-unique, nonclustered index, the Mecanismo de Banco de DadosDatabase Engine adds the partitioning column as a non-key (included) column of the index, if it is not already specified.

Se partition_scheme_name ou filegroup não for especificado e a tabela estiver particionada, o índice será colocado no mesmo esquema de partição, usando a mesma coluna de particionamento que a tabela subjacente.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.

Observação

Não é possível especificar um esquema de particionamento em um índice XML.You cannot specify a partitioning scheme on an XML index. Se a tabela base for particionada, o índice XML usará o mesmo esquema de partição que a tabela.If the base table is partitioned, the XML index uses the same partition scheme as the table.

Para obter mais informações sobre particionamento de índices, consulte Tabelas e índices particionados.For more information about partitioning indexes, Partitioned Tables and Indexes.

ON filegroup_name ON filegroup_name
Cria o índice especificado no grupo de arquivos especificado.Creates the specified index on the specified filegroup. Se nenhum local for especificado e a tabela ou exibição não for particionada, o índice usará o mesmo grupo de arquivos que a tabela ou exibição subjacente.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. O grupo de arquivos já deve existir.The filegroup must already exist.

ON "default" ON "default"
Cria o índice especificado no grupo de arquivos padrão.Creates the specified index on the default filegroup.

Nesse contexto, default não é uma palavra-chave.The term default, in this context, is not a keyword. É um identificador para o grupo de arquivos padrão e precisa ser delimitado, como em ON "default" ou ON [default] .It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [default]. Se "default" é especificado, a opção QUOTED_IDENTIFIER deve ser definida como ON na sessão atual.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Essa é a configuração padrão.This is the default setting. Para saber mais, confira SET QUOTED_IDENTIFIER.For more information, see SET QUOTED_IDENTIFIER.

[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ][ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
Aplica-se a: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 e posterior).Applies to: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 and later).

Especifica a colocação de dados FILESTREAM para a tabela quando um índice clusterizado é criado.Specifies the placement of FILESTREAM data for the table when a clustered index is created. A cláusula FILESTREAM_ON permite mover os dados FILESTREAM para outro grupo de arquivos ou esquema de partição FILESTREAM.The FILESTREAM_ON clause allows FILESTREAM data to be moved to a different FILESTREAM filegroup or partition scheme.

filestream_filegroup_name é o nome de um grupo de arquivos FILESTREAM.filestream_filegroup_name is the name of a FILESTREAM filegroup. O grupo de arquivos deve ter um arquivo definido para o grupo de arquivos usando uma instrução CREATE DATABASE ou ALTER DATABASE; caso contrário, será gerado um erro.The filegroup must have one file defined for the filegroup by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

Se a tabela for particionada, a cláusula FILESTREAM_ON precisará ser incluída e especificar um esquema de partição de grupos de arquivos FILESTREAM que use a mesma função de partição e as mesmas colunas de partição do esquema de partição da tabela.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. Caso contrário, será gerado um erro.Otherwise, an error is raised.

Se a tabela não estiver particionada, a coluna FILESTREAM não poderá ser particionada.If the table is not partitioned, the FILESTREAM column cannot be partitioned. Os dados FILESTREAM da tabela precisam ser armazenados em um único grupo de arquivos que é especificado na cláusula 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 poderá ser especificado em uma instrução CREATE INDEX se um índice clusterizado estiver sendo criado e a tabela não contiver uma coluna 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.

Para obter mais informações, veja FILESTREAM.For more information, see FILESTREAM.

ROWGUIDCOLROWGUIDCOL
Indica que a nova coluna é uma coluna de GUID de linha.Indicates that the new column is a row GUID column. Somente uma coluna uniqueidentifier por tabela pode ser designada como a coluna ROWGUIDCOL.Only one uniqueidentifier column per table can be designated as the ROWGUIDCOL column. A aplicação da propriedade ROWGUIDCOL permite que a coluna seja referenciada usando $ROWGUID.Applying the ROWGUIDCOL property enables the column to be referenced using $ROWGUID. A propriedade ROWGUIDCOL pode ser atribuída somente a uma coluna uniqueidentifier.The ROWGUIDCOL property can be assigned only to a uniqueidentifier column. As colunas de tipo de dados definido pelo usuário não podem ser designadas com ROWGUIDCOL.User-defined data type columns cannot be designated with ROWGUIDCOL.

A propriedade ROWGUIDCOL não impõe exclusividade dos valores armazenados na coluna.The ROWGUIDCOL property does not enforce uniqueness of the values stored in the column. ROWGUIDCOL também não gera automaticamente valores para novas linhas inseridas na tabela.ROWGUIDCOL also does not automatically generate values for new rows inserted into the table. Para gerar valores exclusivos para cada coluna, use a função NEWID ou NEWSEQUENTIALID em instruções INSERT ou use essas funções como o padrão para a coluna.To generate unique values for each column, either use the NEWID or NEWSEQUENTIALID function on INSERT statements or use these functions as the default for the column.

ENCRYPTED WITHENCRYPTED WITH
Especifica as colunas de criptografia usando o recurso Always Encrypted.Specifies encrypting columns by using the Always Encrypted feature.

COLUMN_ENCRYPTION_KEY = nome_da_chave COLUMN_ENCRYPTION_KEY = key_name
Especifica a chave de criptografia de coluna.Specifies the column encryption key. Para obter mais informações, veja CREATE COLUMN ENCRYPTION KEY.For more information, see CREATE COLUMN ENCRYPTION KEY.

ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }
Criptografia determinística usa um método que sempre gera o mesmo valor criptografado para qualquer valor de texto não criptografado.Deterministic encryption uses a method which always generates the same encrypted value for any given plain text value. Usar criptografia determinística permite pesquisar usando comparação de igualdade, agrupamento e junção de tabelas usando junções de igualdade baseadas em valores criptografados, mas também pode permitir que usuários não autorizados adivinhem informações sobre valores criptografados examinando padrões na coluna criptografada.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. A união de duas tabelas em colunas criptografadas de maneira determinística só é possível se ambas as colunas são criptografadas com a mesma chave de criptografia de coluna.Joining two tables on columns encrypted deterministically is only possible if both columns are encrypted using the same column encryption key. A criptografia determinística deve usar uma ordenação de colunas com uma ordem de classificação binary2 para as colunas de caracteres.Deterministic encryption must use a column collation with a binary2 sort order for character columns.

Criptografia aleatória usa um método que criptografa os dados de uma maneira menos previsível.Randomized encryption uses a method that encrypts data in a less predictable manner. A criptografia aleatória é mais segura, mas impede que cálculos e indexação sejam feitos em colunas criptografadas, a menos que sua instância do SQL Server tenha suporte para Always Encrypted com enclaves seguros.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. Veja Always Encrypted com enclaves seguros para obter detalhes.Please see Always Encrypted with secure enclaves for details.

Se você estiver usando o Always Encrypted (sem enclaves seguros), use a criptografia determinística para colunas que serão pesquisadas com parâmetros ou com parâmetros de agrupamento, por exemplo, um número de identificação do governo.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 criptografia randomizada, para dados como número de cartão de crédito, que não é agrupada a outros registros nem usada para unir tabelas, e não é pesquisada porque você usa outras colunas (como número de transações) para localizar a linha que contém a coluna criptografada de interesse.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.

Se você está usando o Always Encrypted com enclaves seguros, a criptografia aleatória é um tipo de criptografia recomendado.If you are using Always Encrypted with secure enclaves, randomized encryption is a recommended encryption type.

As colunas devem ser de um tipo de dados qualificado.Columns must be of a qualifying data type.

ALGORITHMALGORITHM
Aplica-se a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) e posterior).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later).

Deve ser 'AEAD_AES_256_CBC_HMAC_SHA_256' .Must be 'AEAD_AES_256_CBC_HMAC_SHA_256'.

Para mais informações, incluindo restrições de recursos, veja Always Encrypted.For more information including feature constraints, see Always Encrypted.

SPARSESPARSE
Indica que a coluna é uma coluna esparsa.Indicates that the column is a sparse column. O armazenamento de colunas esparsas é otimizado para obter valores nulos.The storage of sparse columns is optimized for null values. Colunas esparsas não podem ser designadas como NOT NULL.Sparse columns cannot be designated as NOT NULL. Para obter restrições adicionais e mais informações sobre colunas esparsas, consulte Usar colunas esparsas.For additional restrictions and more information about sparse columns, see Use Sparse Columns.

MASKED WITH ( FUNCTION = ' mask_function ')MASKED WITH ( FUNCTION = ' mask_function ')
Aplica-se a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) e posterior).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later).

Especifica uma máscara de dados dinâmicos.Specifies a dynamic data mask. mask_function é o nome da função de mascaramento com os parâmetros apropriados.mask_function is the name of the masking function with the appropriate parameters. Quatro funções estão disponíveis:Four functions are available:

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

Para parâmetros de função, consulte Máscara de Dados Dinâmicos.For function parameters, see Dynamic Data Masking.

FILESTREAMFILESTREAM
Aplica-se a: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 e posterior)Applies to: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 and later)

Válido somente para colunas varbinary(max) .Valid only for varbinary(max) columns. Especifica o armazenamento FILESTREAM para dados de BLOB varbinary(max) .Specifies FILESTREAM storage for the varbinary(max) BLOB data.

A tabela também deve ter uma coluna do tipo de dados uniqueidentifier com o atributo ROWGUIDCOL.The table must also have a column of the uniqueidentifier data type that has the ROWGUIDCOL attribute. Essa coluna não deve permitir valores nulos e deve ter uma restrição de coluna única UNIQUE ou PRIMARY KEY.This column must not allow null values and must have either a UNIQUE or PRIMARY KEY single-column constraint. O valor de GUID da coluna deve ser fornecido por um aplicativo ao inserir dados ou por uma restrição DEFAULT que usa a função 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.

A coluna ROWGUIDCOL não pode ser descartada e as restrições relacionadas não podem ser alteradas enquanto houver uma coluna FILESTREAM definida para a tabela.The ROWGUIDCOL column cannot be dropped and the related constraints cannot be changed while there is a FILESTREAM column defined for the table. A coluna ROWGUIDCOL poderá ser descartada somente depois que a última coluna FILESTREAM for descartada.The ROWGUIDCOL column can be dropped only after the last FILESTREAM column is dropped.

Quando o atributo de armazenamento FILESTREAM é especificado para uma coluna, todos os valores da coluna são armazenados em um contêiner de dados FILESTREAM no sistema de arquivos.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
Especifica a ordenação da coluna.Specifies the collation for the column. O nome da ordenação tanto pode ser um nome de ordenação do Windows como um nome de ordenação SQL.Collation name can be either a Windows collation name or an SQL collation name. collation_name é aplicável somente a colunas dos tipos de dados char, varchar, text, nchar, nvarchar e ntext.collation_name is applicable only for columns of the char, varchar, text, nchar, nvarchar, and ntext data types. Se não for especificado, à coluna será atribuída a ordenação do tipo de dados definido pelo usuário, se a coluna for de um tipo de dados definido pelo usuário, ou a ordenação do banco de dados atual.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.

Para obter mais informações sobre os nomes de ordenação do Windows e do SQL, consulte Nome de ordenação do Windows e Nome de ordenação do SQL.For more information about the Windows and SQL collation names, see Windows Collation Name and SQL Collation Name.

Para obter mais informações, consulte COLLATE.For more information, see COLLATE.

CONSTRAINTCONSTRAINT
É uma palavra-chave opcional que indica o início da definição de uma restrição PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY ou CHECK.Is an optional keyword that indicates the start of the definition of a PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY, or CHECK constraint.

constraint_name constraint_name
É o nome de uma restrição.Is the name of a constraint. Nomes de restrição devem ser exclusivos no esquema ao qual a tabela pertence.Constraint names must be unique within the schema to which the table belongs.

NULL | NOT NULLNULL | NOT NULL
Determinam se são permitidos valores nulos na coluna.Determine whether null values are allowed in the column. NULL não é estritamente uma restrição, mas pode ser especificado simplesmente como NOT NULL.NULL is not strictly a constraint but can be specified just like NOT NULL. NOT NULL poderá ser especificado para colunas computadas somente se PERSISTED também for especificado.NOT NULL can be specified for computed columns only if PERSISTED is also specified.

PRIMARY KEYPRIMARY KEY
É uma restrição que impõe integridade de entidade para uma ou mais colunas especificadas por meio de um índice exclusivo.Is a constraint that enforces entity integrity for a specified column or columns through a unique index. Somente uma restrição PRIMARY KEY pode ser criada por tabela.Only one PRIMARY KEY constraint can be created per table.

UNIQUEUNIQUE
É uma restrição que fornece integridade de entidade para uma coluna ou colunas especificadas por meio de um índice exclusivo.Is a constraint that provides entity integrity for a specified column or columns through a unique index. Uma tabela pode ter várias restrições UNIQUE.A table can have multiple UNIQUE constraints.

CLUSTERED | NONCLUSTEREDCLUSTERED | NONCLUSTERED
Indica que um índice clusterizado ou não clusterizado será criado para a restrição PRIMARY KEY ou UNIQUE.Indicate that a clustered or a nonclustered index is created for the PRIMARY KEY or UNIQUE constraint. O padrão das restrições PRIMARY KEY é CLUSTERED e das restrições UNIQUE é NONCLUSTERED.PRIMARY KEY constraints default to CLUSTERED, and UNIQUE constraints default to NONCLUSTERED.

Em uma instrução CREATE TABLE, CLUSTERED pode ser especificado apenas para uma restrição.In a CREATE TABLE statement, CLUSTERED can be specified for only one constraint. Se CLUSTERED for especificado para uma restrição UNIQUE e uma restrição PRIMARY KEY também for especificada, PRIMARY KEY adotará o padrão de NONCLUSTERED.If CLUSTERED is specified for a UNIQUE constraint and a PRIMARY KEY constraint is also specified, the PRIMARY KEY defaults to NONCLUSTERED.

FOREIGN KEY REFERENCESFOREIGN KEY REFERENCES
É uma restrição que fornece integridade referencial para os dados na coluna ou colunas.Is a constraint that provides referential integrity for the data in the column or columns. As restrições FOREIGN KEY requerem que cada valor na coluna exista na coluna ou colunas referenciadas correspondentes na tabela referenciada.FOREIGN KEY constraints require that each value in the column exists in the corresponding referenced column or columns in the referenced table. As restrições FOREIGN KEY podem fazer referência somente a colunas que sejam restrições PRIMARY KEY ou UNIQUE na tabela ou colunas referenciadas em um UNIQUE INDEX na tabela referenciada.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. As chaves estrangeiras em colunas computadas também devem ser marcadas como PERSISTED.Foreign keys on computed columns must also be marked PERSISTED.

[ schema_name . ] referenced_table_name][ schema_name.] referenced_table_name]
É o nome da tabela referenciada pela restrição FOREIGN KEY e o esquema ao qual ela pertence.Is the name of the table referenced by the FOREIGN KEY constraint, and the schema to which it belongs.

( ref_column [ , ... n ] ) É uma coluna, ou lista de colunas, da tabela referenciadas pela restrição 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 }
Especifica qual ação ocorrerá nas linhas da tabela criada se essas linhas tiverem uma relação referencial e a linha referenciada for excluída da tabela pai.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. O padrão é NO ACTION.The default is NO ACTION.

NO ACTIONNO ACTION
O Mecanismo de Banco de DadosDatabase Engine gera um erro e a ação de excluir na linha da tabela pai é revertida.The Mecanismo de Banco de DadosDatabase Engine raises an error and the delete action on the row in the parent table is rolled back.

CASCADECASCADE
As linhas correspondentes serão excluídas da tabela de referência se aquela linha for excluída da tabela pai.Corresponding rows are deleted from the referencing table if that row is deleted from the parent table.

SET NULLSET NULL
Todos os valores que compõem a chave estrangeira serão definidos como NULL se a linha correspondente na tabela pai for excluída.All the values that make up the foreign key are set to NULL if the corresponding row in the parent table is deleted. Para que essa restrição seja executada, as colunas de chave estrangeira devem ser anuláveis.For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULTSET DEFAULT
Todos os valores que compõem a chave estrangeira serão definidos com seus valores padrão se a linha correspondente na tabela pai for excluída.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. Para que essa restrição seja executada, todas as colunas de chave estrangeira devem ter definições padrão.For this constraint to execute, all foreign key columns must have default definitions. Se a coluna for anulável e não houver nenhum valor padrão explícito definido, NULL se tornará o valor padrão implícito para a coluna.If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

Não especifique CASCADE se a tabela for incluída em uma publicação de mesclagem que usa registros lógicos.Do not specify CASCADE if the table will be included in a merge publication that uses logical records. Para obter mais informações sobre registros lógicos, consulte Agrupar alterações em linhas relacionadas com registros lógicos.For more information about logical records, see Group Changes to Related Rows with Logical Records.

ON DELETE CASCADE não poderá ser definido se um INSTEAD OF gatilho ON DELETE já existir na tabela.ON DELETE CASCADE cannot be defined if an INSTEAD OF trigger ON DELETE already exists on the table.

Por exemplo, no banco de dados do AdventureWorks2012AdventureWorks2012, a tabela ProductVendor tem uma relação referencial com a tabela Vendor.For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table. A chave estrangeira ProductVendor.BusinessEntityID referencia a chave primária Vendor.BusinessEntityID.The ProductVendor.BusinessEntityID foreign key references the Vendor.BusinessEntityID primary key.

Se uma instrução DELETE for executada em uma linha da tabela Vendor e uma ação ON DELETE CASCADE for especificada para ProductVendor.BusinessEntityID, o Mecanismo de Banco de DadosDatabase Engine verificará se há uma ou mais linhas dependentes na tabela 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 Mecanismo de Banco de DadosDatabase Engine checks for one or more dependent rows in the ProductVendor table. Se existir alguma, as linhas dependentes da tabela ProductVendor serão excluídas, além da linha referenciada na tabela Vendor.If any exist, the dependent rows in the ProductVendor table are deleted, and also the row referenced in the Vendor table.

Por outro lado, se NO ACTION for especificado, o Mecanismo de Banco de DadosDatabase Engine gerará um erro e reverterá a ação de exclusão da linha Vendor, caso haja, pelo menos, uma linha na tabela ProductVendor que a referencie.Conversely, if NO ACTION is specified, the Mecanismo de Banco de DadosDatabase 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 }
Especifica a ação que ocorre nas linhas da tabela alterada, quando essas linhas têm uma relação referencial e a linha referenciada for atualizada na tabela pai.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. O padrão é NO ACTION.The default is NO ACTION.

NO ACTIONNO ACTION
O Mecanismo de Banco de DadosDatabase Engine gera um erro, e a ação de atualizar na linha da tabela pai é revertida.The Mecanismo de Banco de DadosDatabase Engine raises an error, and the update action on the row in the parent table is rolled back.

CASCADECASCADE
As linhas correspondentes são atualizadas na tabela de referência quando aquela linha é atualizada na tabela pai.Corresponding rows are updated in the referencing table when that row is updated in the parent table.

SET NULLSET NULL
Todos os valores que compõem a chave estrangeira são definidos como NULL quando a linha correspondente na tabela pai é atualizada.All the values that make up the foreign key are set to NULL when the corresponding row in the parent table is updated. Para que essa restrição seja executada, as colunas de chave estrangeira devem ser anuláveis.For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULTSET DEFAULT
Todos os valores que compõem a chave estrangeira são definidos como seus valores padrão quando a linha correspondente na tabela pai é atualizada.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. Para que essa restrição seja executada, todas as colunas de chave estrangeira devem ter definições padrão.For this constraint to execute, all foreign key columns must have default definitions. Se a coluna for anulável e não houver nenhum valor padrão explícito definido, NULL se tornará o valor padrão implícito para a coluna.If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

Não especifique CASCADE se a tabela for incluída em uma publicação de mesclagem que usa registros lógicos.Do not specify CASCADE if the table will be included in a merge publication that uses logical records. Para obter mais informações sobre registros lógicos, consulte Agrupar alterações em linhas relacionadas com registros lógicos.For more information about logical records, see Group Changes to Related Rows with Logical Records.

ON UPDATE CASCADE, SET NULL ou SET DEFAULT não poderá ser definido se um INSTEAD OF gatilho ON UPDATE já existir na tabela que está sendo alterada.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.

Por exemplo, no banco de dados do AdventureWorks2012AdventureWorks2012, a tabela ProductVendor tem uma relação referencial com a tabela Vendor: A chave estrangeira ProductVendor.BusinessEntity faz referência à chave primária 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.

Se uma instrução UPDATE for executada em uma linha da tabela Vendor e uma ação ON UPDATE CASCADE for especificada para ProductVendor.BusinessEntityID, o Mecanismo de Banco de DadosDatabase Engine verificará se há uma ou mais linhas dependentes na tabela 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 Mecanismo de Banco de DadosDatabase Engine checks for one or more dependent rows in the ProductVendor table. Se existir alguma, as linhas dependentes da tabela ProductVendor serão atualizadas, além da linha referenciada na tabela Vendor.If any exist, the dependent rows in the ProductVendor table are updated, and also the row referenced in the Vendor table.

De modo inverso, se NO ACTION for especificada, o Mecanismo de Banco de DadosDatabase Engine gerará um erro e reverterá a ação de atualização da linha Vendor se houver pelo menos uma linha da tabela ProductVendor que a referencie.Conversely, if NO ACTION is specified, the Mecanismo de Banco de DadosDatabase Engine raises an error and rolls back the update action on the Vendor row if there is at least one row in the ProductVendor table that references it.

CHECKCHECK
É uma restrição que impõe a integridade de domínio limitando os possíveis valores que podem ser inseridos em uma ou mais colunas.Is a constraint that enforces domain integrity by limiting the possible values that can be entered into a column or columns. As restrições CHECK em colunas computadas também devem ser marcadas como PERSISTED.CHECK constraints on computed columns must also be marked PERSISTED.

logical_expression logical_expression
É uma expressão lógica que retorna TRUE ou FALSE.Is a logical expression that returns TRUE or FALSE. Tipos de dados do alias não podem fazer parte da expressão.Alias data types cannot be part of the expression.

column column
É uma coluna, ou lista de colunas, entre parênteses, usada em restrições de tabela para indicar as colunas usadas na definição da restrição.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 ]
Especifica a ordem na qual a coluna ou colunas que participam de restrições de tabela são classificadas.Specifies the order in which the column or columns participating in table constraints are sorted. O padrão é ASC.The default is ASC.

partition_scheme_name partition_scheme_name
É o nome do esquema de partição que define os grupos de arquivos sobre os quais as partições de uma tabela particionada serão mapeadas.Is the name of the partition scheme that defines the filegroups onto which the partitions of a partitioned table will be mapped. O esquema de partição deve existir no banco de dados.The partition scheme must exist within the database.

[ partition_column_name .[ partition_column_name. ]]
Especifica a coluna que servirá de base para o particionamento de uma tabela particionada.Specifies the column against which a partitioned table will be partitioned. A coluna deve corresponder àquela especificada na função de partição que partition_scheme_name está usando em termos de tipo de dados, comprimento e precisão.The column must match that specified in the partition function that partition_scheme_name is using in terms of data type, length, and precision. Uma coluna computada que participa de uma função de partição deve ser marcada explicitamente como PERSISTED.A computed columns that participates in a partition function must be explicitly marked PERSISTED.

Importante

Recomendamos a especificação de NOT NULL na coluna de particionamento das tabelas particionadas e também de tabelas não particionadas que servem de origem e destino para as operações 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. Isso garante que toda restrição CHECK de colunas de particionamento não terão que verificar se existem valores nulos.Doing this makes sure that any CHECK constraints on partitioning columns do not have to check for null values.

WITH FILLFACTOR = fillfactor WITH FILLFACTOR =fillfactor
Especifica o quanto o Mecanismo de Banco de DadosDatabase Engine deve preencher cada página de índice usada para armazenar os dados de índice.Specifies how full the Mecanismo de Banco de DadosDatabase Engine should make each index page that is used to store the index data. Os valores de fillfactor especificados pelo usuário podem ser de 1 a 100.User-specified fillfactor values can be from 1 through 100. Se um valor não for especificado, o padrão será 0.If a value is not specified, the default is 0. Os valores de fator de preenchimento 0 e 100 são iguais em todos os aspectos.Fill factor values 0 and 100 are the same in all respects.

Importante

A documentação de WITH FILLFACTOR = fillfactor como a única opção de índice aplicável às restrições PRIMARY KEY ou UNIQUE é mantida para fins de compatibilidade com versões anteriores, mas não será documentada dessa maneira em versões futuras.Documenting WITH FILLFACTOR = fillfactor as the only index option that applies to PRIMARY KEY or UNIQUE constraints is maintained for backward compatibility, but will not be documented in this manner in future releases.

column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNScolumn_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
É o nome do conjunto de colunas.Is the name of the column set. Um conjunto de colunas é uma representação em XML sem-tipo que combina todas as colunas esparsas de uma tabela em uma saída estruturada.A column set is an untyped XML representation that combines all of the sparse columns of a table into a structured output. Para obter mais informações sobre conjuntos de colunas, veja Usar conjuntos de colunas.For more information about column sets, see Use Column Sets.

PERIOD FOR SYSTEM_TIME (system_start_time_column_name, system_end_time_column_name )PERIOD FOR SYSTEM_TIME (system_start_time_column_name , system_end_time_column_name )
Aplica-se a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) e posterior) e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later) and Banco de dados SQL do AzureAzure SQL Database.

Especifica os nomes das colunas que o sistema usará para registrar o período para o qual um registro é válido.Specifies the names of the columns that the system will use to record the period for which a record is valid. Use esse argumento junto com os argumentos GENERATED ALWAYS AS ROW { START | END } e WITH SYSTEM_VERSIONING = ON para habilitar o controle de versão do sistema em uma tabela.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. Para saber mais, veja Temporal Tables.For more information, see Temporal Tables.

COMPRESSION_DELAYCOMPRESSION_DELAY
Aplica-se a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) e posterior) e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later) and Banco de dados SQL do AzureAzure SQL Database.

Para uma otimização de memória, atraso especifica o número mínimo de minutos que uma linha deve permanecer na tabela, inalterada, antes de ser elegível para compactação no índice 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. O SQL ServerSQL Server seleciona linhas específicas a serem compactadas de acordo com a hora da última atualização.SQL ServerSQL Server selects specific rows to compress according to their last update time. Por exemplo, se as linhas estiverem sendo alteradas com frequência durante um período de duas horas, você poderá definir COMPRESSION_DELAY = 120 Minutes para garantir que as atualizações sejam concluídas antes de o SQL Server compactar a linha.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.

Para uma tabela baseada em disco, o atraso especifica o número mínimo de minutos que um rowgroup delta no estado CLOSED precisa permanecer no rowgroup delta antes que o SQL ServerSQL Server possa compactá-lo no rowgroup compactado.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. Como as tabelas baseadas em disco não controlam os tempos de inserção e atualização em linhas individuais, o SQL ServerSQL Server aplica o atraso aos rowgroups delta no estado 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.

O padrão é 0 minuto.The default is 0 minutes.

Para obter recomendações sobre quando usar COMPRESSION_DELAY, confira Introdução ao Columnstore para análise operacional em tempo realFor recommendations on when to use COMPRESSION_DELAY, please see Get started with Columnstore for real time operational analytics

< table_option> ::=< table_option> ::=
Especifica uma ou mais opções de tabela.Specifies one or more table options.

DATA_COMPRESSIONDATA_COMPRESSION
Especifica a opção de compactação de dados para a tabela, o número de partição ou o intervalo de partições especificado.Specifies the data compression option for the specified table, partition number, or range of partitions. As opções são as seguintes:The options are as follows:

NenhumaNONE
A tabela ou as partições especificadas não são compactadas.Table or specified partitions are not compressed.

ROWROW
A tabela ou as partições especificadas são compactadas usando a compactação de linha.Table or specified partitions are compressed by using row compression.

PAGEPAGE
A tabela ou as partições especificadas são compactadas usando a compactação de página.Table or specified partitions are compressed by using page compression.

COLUMNSTORECOLUMNSTORE

Aplica-se a: SQL Server 2016 (13.x)SQL Server 2016 (13.x) e posterior e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later and Banco de dados SQL do AzureAzure SQL Database.

Aplica-se somente a índices columnstore, incluindo índices columnstore não clusterizados e clusterizados.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE especifica para compactar com a compactação columnstore de maior desempenho.COLUMNSTORE specifies to compress with the most performant columnstore compression. Essa é a opção típica.This is the typical choice.

COLUMNSTORE_ARCHIVECOLUMNSTORE_ARCHIVE
Aplica-se a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) e posterior) e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later) and Banco de dados SQL do AzureAzure SQL Database.

Aplica-se somente a índices columnstore, incluindo índices columnstore não clusterizados e clusterizados.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE_ARCHIVE compactará ainda mais a tabela ou a partição para um tamanho menor.COLUMNSTORE_ARCHIVE will further compress the table or partition to a smaller size. Isso pode ser usado para fins de arquivamento, ou em outras situações que exijam menos armazenamento e possam dispensar mais tempo para armazenamento e recuperação.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.

Para saber mais, veja Data Compression.For more information, see Data Compression.

ON PARTITIONS ( { <partition_number_expression> | [ , ...n ] ) ON PARTITIONS ( { <partition_number_expression> | [ ,...n ] )
Especifica as partições às quais se aplica a configuração DATA_COMPRESSION.Specifies the partitions to which the DATA_COMPRESSION setting applies. Se a tabela não for particionada, o argumento ON PARTITIONS ON PARTITIONS gerará um erro.If the table is not partitioned, the ON PARTITIONS argument will generate an error. Se a cláusula ON PARTITIONS não for fornecida, a opção DATA_COMPRESSION será aplicada a todas as partições de uma tabela particionada.If the ON PARTITIONS clause is not provided, the DATA_COMPRESSION option will apply to all partitions of a partitioned table.

partition_number_expression pode ser especificado das seguintes maneiras:partition_number_expression can be specified in the following ways:

  • Forneça o número de uma partição, por exemplo: ON PARTITIONS (2)Provide the partition number of a partition, for example: ON PARTITIONS (2)
  • Forneça os números de várias partições individuais separados por vírgulas, por exemplo: ON PARTITIONS (1, 5)Provide the partition numbers for several individual partitions separated by commas, for example: ON PARTITIONS (1, 5)
  • Forneça os intervalos e as partições individuais, por exemplo: ON PARTITIONS (2, 4, 6 TO 8)Provide both ranges and individual partitions, for example: ON PARTITIONS (2, 4, 6 TO 8)

<range> pode ser especificado como números de partição separados pela palavra TO, por exemplo: ON PARTITIONS (6 TO 8).<range> can be specified as partition numbers separated by the word TO, for example: ON PARTITIONS (6 TO 8).

Para definir tipos diferentes de compactação de dados para partições diferentes, especifique a opção DATA_COMPRESSION mais de uma vez, por exemplo: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> ::=
Especifica uma ou mais opções de índice.Specifies one or more index options. Para obter uma descrição completa dessas opções, consulte CREATE INDEX.For a complete description of these options, see CREATE INDEX.

PAD_INDEX = { ON | OFF }PAD_INDEX = { ON | OFF }
Quando ON, o percentual de espaço livre especificado por FILLFACTOR será aplicado às páginas de nível intermediário do índice.When ON, the percentage of free space specified by FILLFACTOR is applied to the intermediate level pages of the index. Quando OFF ou se o valor de FILLFACTOR não foi especificado, as páginas de nível intermediário são preenchidas até próximo de sua capacidade, deixando espaço suficiente para pelo menos uma linha do tamanho máximo que o índice pode ter, considerando o conjunto de chaves em páginas intermediárias.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. O padrão é OFF.The default is OFF.

FILLFACTOR = fillfactor FILLFACTOR =fillfactor
Especifica uma porcentagem que indica quanto Mecanismo de Banco de DadosDatabase Engine deve preencher o nível folha de cada página de índice durante a criação ou alteração do índice.Specifies a percentage that indicates how full the Mecanismo de Banco de DadosDatabase Engine should make the leaf level of each index page during index creation or alteration. fillfactor deve ser um valor inteiro de 1 a 100.fillfactor must be an integer value from 1 to 100. O padrão é 0.The default is 0. Os valores de fator de preenchimento 0 e 100 são iguais em todos os aspectos.Fill factor values 0 and 100 are the same in all respects.

IGNORE_DUP_KEY = { ON | OFF }IGNORE_DUP_KEY = { ON | OFF }
Especifica a resposta de erro quando uma operação de inserção tenta inserir valores da chave duplicada em um índice exclusivo.Specifies the error response when an insert operation attempts to insert duplicate key values into a unique index. A opção IGNORE_DUP_KEY aplica-se apenas a operações de inserção depois que o índice é criado ou recriado.The IGNORE_DUP_KEY option applies only to insert operations after the index is created or rebuilt. A opção não tem nenhum efeito ao executar CREATE INDEX, ALTER INDEX ou UPDATE.The option has no effect when executing CREATE INDEX, ALTER INDEX, or UPDATE. O padrão é OFF.The default is OFF.

ONON
Uma mensagem de aviso será exibida quando valores de chave duplicados forem inseridos em um índice exclusivo.A warning message will occur when duplicate key values are inserted into a unique index. Ocorrerá falha somente nas linhas que violarem a restrição de exclusividade.Only the rows violating the uniqueness constraint will fail.

OFFOFF
Ocorrerá uma mensagem de erro quando os valores de chave duplicados forem inseridos em um índice exclusivo.An error message will occur when duplicate key values are inserted into a unique index. Toda a operação INSERT será revertida.The entire INSERT operation will be rolled back.

IGNORE_DUP_KEY não pode ser definido como ON para índices criados em uma exibição, índices não exclusivos, índices XML, índices espaciais e índices filtrados.IGNORE_DUP_KEY cannot be set to ON for indexes created on a view, non-unique indexes, XML indexes, spatial indexes, and filtered indexes.

Para exibir IGNORE_DUP_KEY, use sys.indexes.To view IGNORE_DUP_KEY, use sys.indexes.

Na sintaxe compatível com versões anteriores, WITH IGNORE_DUP_KEY é equivalente a WITH IGNORE_DUP_KEY = ON.In backward compatible syntax, WITH IGNORE_DUP_KEY is equivalent to WITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = { ON | OFF }STATISTICS_NORECOMPUTE = { ON | OFF }
Quando ON, as estatísticas de índice desatualizadas não serão recalculadas automaticamente.When ON, out-of-date index statistics are not automatically recomputed. Quando OFF, a atualização automática de estatísticas será habilitada.When OFF, automatic statistics updating are enabled. O padrão é OFF.The default is OFF.

ALLOW_ROW_LOCKS = { ON | OFF }ALLOW_ROW_LOCKS = { ON | OFF }
Quando ON, bloqueios de linha serão permitidos quando você acessar o índice.When ON, row locks are allowed when you access the index. O Mecanismo de Banco de DadosDatabase Engine determina quando os bloqueios de linha são usados.The Mecanismo de Banco de DadosDatabase Engine determines when row locks are used. No caso de OFF, não são usados bloqueios de linha.When OFF, row locks are not used. O padrão é ON.The default is ON.

ALLOW_PAGE_LOCKS = { ON | OFF }ALLOW_PAGE_LOCKS = { ON | OFF }
Quando ON, bloqueios de página serão permitidos quando você acessar o índice.When ON, page locks are allowed when you access the index. O Mecanismo de Banco de DadosDatabase Engine determina quando os bloqueios de página são usados.The Mecanismo de Banco de DadosDatabase Engine determines when page locks are used. Quando definidos como OFF, os bloqueios de página não são usados.When OFF, page locks are not used. O padrão é ON.The default is ON.

OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF } Aplica-se ao: SQL Server 2019 (15.x)SQL Server 2019 (15.x) e versões posteriores.OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF } Applies to: SQL Server 2019 (15.x)SQL Server 2019 (15.x) and later.
Especifica se a contenção de inserção de última página será ou não otimizada.Specifies whether or not to optimize for last-page insert contention. O padrão é OFF.The default is OFF. Para saber mais, confira a seção Chaves sequenciais da página CREATE INDEX.See the Sequential Keys section of the CREATE INDEX page for more information.

FILETABLE_DIRECTORY = directory_nameFILETABLE_DIRECTORY = directory_name

Aplica-se a: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) e posterior).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later).

Especifica o nome do diretório FileTable compatível com Windows.Specifies the windows-compatible FileTable directory name. Esse nome deve ser exclusivo entre todos os nomes de diretórios de FileTable no banco de dados.This name should be unique among all the FileTable directory names in the database. A comparação de exclusividade não diferencia maiúsculas de minúsculas, independentemente das configurações de ordenação.Uniqueness comparison is case-insensitive, regardless of collation settings. Se esse valor não for especificado, o nome de filetable será usado.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 }

Aplica-se a: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) e posterior).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later). Banco de dados SQL do AzureAzure SQL Database não dá suporte para FILETABLE.does not support FILETABLE.

Especifica o nome da ordenação a ser aplicado à coluna Name da FileTable.Specifies the name of the collation to be applied to the Name column in the FileTable. A ordenação não deve diferenciar maiúsculas de minúsculas para ser compatível com a semântica de nomenclatura de arquivos do Windows.The collation must be case-insensitive to comply with Windows file naming semantics. Se esse valor não for especificado, a ordenação padrão do banco de dados será usada.If this value is not specified, the database default collation is used. Se a ordenação padrão do banco de dados diferenciar maiúsculas de minúsculas, será gerado um erro e a operação CREATE TABLE falhará.If the database default collation is case-sensitive, an error is raised and the CREATE TABLE operation fails.

collation_name collation_name
O nome de uma ordenação sem diferenciação de maiúsculas e minúsculas.The name of a case-insensitive collation.

database_defaultdatabase_default
Especifica que a ordenação padrão do banco de dados deve ser usada.Specifies that the default collation for the database should be used. Esse ordenação não deve diferenciar maiúsculas de minúsculas.This collation must be case-insensitive.

FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = nome_da_restrição FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name
Aplica-se a: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) e posterior).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later).

Especifica o nome a ser usado para a restrição de chave primária que é criada automaticamente no FileTable.Specifies the name to be used for the primary key constraint that is automatically created on the FileTable. Se esse valor não for especificado, o sistema gerará um nome para a restrição.If this value is not specified, the system generates a name for the constraint.

FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = nome_da_restrição FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name
Aplica-se a: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) e posterior).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later).

Especifica o nome a ser usado para a restrição exclusiva criada automaticamente na coluna stream_id na FileTable.Specifies the name to be used for the unique constraint that is automatically created on the stream_id column in the FileTable. Se esse valor não for especificado, o sistema gerará um nome para a restrição.If this value is not specified, the system generates a name for the constraint.

FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = nome_da_restrição FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name
Aplica-se a: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) e posterior).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later).

Especifica o nome a ser usado para a restrição exclusiva criada automaticamente nas colunas parent_path_locator e name na 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. Se esse valor não for especificado, o sistema gerará um nome para a restrição.If this value is not specified, the system generates a name for the constraint.

SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name .history_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name .history_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]
Aplica-se a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) e posterior e Banco de dados SQL do AzureAzure SQL Database).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later and Banco de dados SQL do AzureAzure SQL Database).

Habilitará o controle de versão do sistema da tabela se o tipo de dados, a restrição de nulidade e os requisitos de restrição de chave primária forem atendidos.Enables system versioning of the table if the datatype, nullability constraint, and primary key constraint requirements are met. Se o argumento HISTORY_TABLE não for usado, o sistema gerará uma nova tabela de histórico correspondendo ao esquema da tabela atual no mesmo grupo de arquivos da tabela atual, criando um vínculo entre as duas tabelas e permitindo que o sistema registre o histórico de cada registro da tabela atual na tabela de histórico.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. O nome desta tabela de histórico será MSSQL_TemporalHistoryFor<primary_table_object_id>.The name of this history table will be MSSQL_TemporalHistoryFor<primary_table_object_id>. Por padrão, a tabela de histórico é PAGE compactado.By default, the history table is PAGE compressed. Se o argumento HISTORY_TABLE for usado para criar um vínculo e usar uma tabela de histórico existente, o vínculo será criado entre a tabela atual e a tabela especificada.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. Se a tabela atual estiver particionada, a tabela de histórico será criada no grupo de arquivos padrão porque a configuração de particionamento não será replicada automaticamente da tabela atual para a tabela de histórico.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. Se o nome de uma tabela de histórico estiver especificado durante a criação da tabela de histórico, você deverá especificar o nome do esquema e da tabela.If the name of a history table is specified during history table creation, you must specify the schema and table name. Ao criar um link para uma tabela de histórico existente, você pode optar por executar uma verificação de consistência de dados.When creating a link to an existing history table, you can choose to perform a data consistency check. Essa verificação de consistência de dados garante que os registros existentes não se sobreponham.This data consistency check ensures that existing records do not overlap. A execução da verificação de consistência dos dados é o padrão.Performing the data consistency check is the default. Use esse argumento junto com os argumentos PERIOD FOR SYSTEM_TIME e GENERATED ALWAYS AS ROW { START | END } para habilitar o controle de versão do sistema em uma tabela.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. Para saber mais, veja Temporal Tables.For more information, see Temporal Tables.

REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [,...n] ) ] | OFF ( MIGRATION_STATE = PAUSED ) }REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [,...n] ) ] | OFF ( MIGRATION_STATE = PAUSED ) }
Aplica-se a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) e posterior).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later).

Cria a nova tabela com o Stretch Database habilitado ou desabilitado.Creates the new table with Stretch Database enabled or disabled. Para obter mais informações, consulte Stretch Database.For more info, see Stretch Database.

Habilitar o Stretch Database para uma tabelaEnabling Stretch Database for a table

Quando você habilitar Stretch para uma tabela especificando ON, pode opcionalmente especificar MIGRATION_STATE = OUTBOUND para começar a migração de dados imediatamente ou MIGRATION_STATE = PAUSED para adiar a migração de dados.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. O valor padrão é MIGRATION_STATE = OUTBOUND.The default value is MIGRATION_STATE = OUTBOUND. Para obter mais informações sobre como habilitar o Stretch para uma tabela, consulte Habilitar o Stretch Database para uma tabela.For more info about enabling Stretch for a table, see Enable Stretch Database for a table.

Pré-requisitos.Prerequisites. Antes de habilitar o Stretch para uma tabela, você precisa habilitar o Stretch no servidor e no banco de dados.Before you enable Stretch for a table, you have to enable Stretch on the server and on the database. Para obter mais informações, consulte Enable Stretch Database for a database.For more info, see Enable Stretch Database for a database.

Permissões.Permissions. Habilitar o Stretch para um banco de dados ou uma tabela exige permissões db_owner.Enabling Stretch for a database or a table requires db_owner permissions. Habilitar o Stretch em uma tabela também requer permissões ALTER na tabela.Enabling Stretch for a table also requires ALTER permissions on the table.

[ FILTER_PREDICATE = { null | predicate } ][ FILTER_PREDICATE = { null | predicate } ]
Aplica-se a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) e posterior).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later).

Opcionalmente, especifique um predicado de filtro para selecionar linhas para migrar de uma tabela que contém dados atuais e históricos.Optionally specifies a filter predicate to select rows to migrate from a table that contains both historical and current data. O predicado deve chamar uma função com valor de tabela embutido determinística.The predicate must call a deterministic inline table-valued function. Para obter mais informações, veja Habilitar Stretch Database para uma tabela e Selecionar linhas a serem migradas usando uma função de filtro.For more info, see Enable Stretch Database for a table and Select rows to migrate by using a filter function.

Importante

Se você fornecer um predicado de filtro precário, a migração de dados também será precária.If you provide a filter predicate that performs poorly, data migration also performs poorly. O Stretch Database aplica o predicado de filtro à tabela usando o operador CROSS APPLY.Stretch Database applies the filter predicate to the table by using the CROSS APPLY operator.

Se você não especificar um predicado de filtro, a tabela inteira será migrada.If you don't specify a filter predicate, the entire table is migrated.

Quando você especifica um predicado de filtro, também precisa especificar MIGRATION_STATE.When you specify a filter predicate, you also have to specify MIGRATION_STATE.

MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }
Aplica-se a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) e posterior) e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later) and Banco de dados SQL do AzureAzure SQL Database.

  • Especifique OUTBOUND para migrar dados do SQL ServerSQL Server para o Banco de dados SQL do AzureAzure SQL Database.Specify OUTBOUND to migrate data from SQL ServerSQL Server to Banco de dados SQL do AzureAzure SQL Database.

  • Especifique INBOUND para copiar os dados remotos na tabela do Banco de dados SQL do AzureAzure SQL Database novamente para o SQL ServerSQL Server e para desabilitar o Stretch na tabela.Specify INBOUND to copy the remote data for the table from Banco de dados SQL do AzureAzure SQL Database back to SQL ServerSQL Server and to disable Stretch for the table. Para obter mais informações, consulte Desabilitar Stretch Database e trazer de volta dados remotos.For more info, see Disable Stretch Database and bring back remote data.

    Essa operação incorre em custos de transferência de dados, e não pode ser cancelada.This operation incurs data transfer costs, and it can't be canceled.

  • Especifique PAUSED para pausar ou adiar a migração de dados.Specify PAUSED to pause or postpone data migration. Para obter mais informações, veja Pausar e retomar a migração de dados – Stretch Database.For more info, see Pause and resume data migration -Stretch Database.

MEMORY_OPTIMIZEDMEMORY_OPTIMIZED
Aplica-se a: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) e posterior e Banco de dados SQL do AzureAzure SQL Database).Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later and Banco de dados SQL do AzureAzure SQL Database). A instância gerenciada do Banco de dados SQL do AzureAzure SQL Database não dá suporte a tabelas otimizadas para memória.Banco de dados SQL do AzureAzure SQL Database managed instance does not support memory optimized tables.

O valor ON indica que a tabela é otimizada para memória.The value ON indicates that the table is memory optimized. Tabelas com otimização de memória são parte do recurso de OLTP in-memory, que é usado para otimização de desempenho do processamento de transações.Memory-optimized tables are part of the In-Memory OLTP feature, which is used to optimized the performance of transaction processing. Para começar com o OLTP in-memory, confira Início Rápido 1: tecnologias do OLTP in-memory para um desempenho mais rápido do Transact-SQL.To get started with In-Memory OLTP see Quick Start 1: In-Memory OLTP Technologies for Faster Transact-SQL Performance. Para obter informações mais detalhadas sobre as tabelas com otimização de memória, veja Tabelas com otimização de memória.For more in-depth information about memory-optimized tables see Memory-Optimized Tables.

O valor padrão OFF indica que a tabela é baseada em disco.The default value OFF indicates that the table is disk-based.

DURABILITYDURABILITY
Aplica-se a: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) e posterior) e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later) and Banco de dados SQL do AzureAzure SQL Database.

O valor de SCHEMA_AND_DATA indica que a tabela é durável, o que significa que as alterações são persistidas em disco e sobrevivem à reinicialização ou ao failover.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 é o valor padrão.SCHEMA_AND_DATA is the default value.

O valor de SCHEMA_ONLY indica que a tabela é não durável.The value of SCHEMA_ONLY indicates that the table is non-durable. O esquema da tabela é mantido, mas as atualizações de dados não são mantidas após uma reinicialização ou failover do banco de dados.The table schema is persisted but any data updates are not persisted upon a restart or failover of the database. DURABILITY = SCHEMA_ONLY só é permitido com MEMORY_OPTIMIZED = ON.DURABILITY = SCHEMA_ONLY is only allowed with MEMORY_OPTIMIZED = ON.

Aviso

Quando uma tabela for criada com DURABILITY = SCHEMA_ONLY, e READ_COMMITTED_SNAPSHOT depois forem alterado usando ALTER DATABASE, os dados na tabela serão perdidos.When a table is created with DURABILITY = SCHEMA_ONLY, and READ_COMMITTED_SNAPSHOT is subsequently changed using ALTER DATABASE, data in the table will be lost.

BUCKET_COUNTBUCKET_COUNT
Aplica-se a: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) e posterior) e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later and Banco de dados SQL do AzureAzure SQL Database.

Indica o número de buckets que devem ser criados no índice de hash.Indicates the number of buckets that should be created in the hash index. O valor máximo para BUCKET_COUNT em índices de hash é 1.073.741.824.The maximum value for BUCKET_COUNT in hash indexes is 1,073,741,824. Para obter mais informações sobre o número de buckets, veja Índices para tabelas com otimização de memória.For more information about bucket counts, see Indexes for Memory-Optimized Tables.

Bucket_count é um argumento obrigatório.Bucket_count is a required argument.

INDEX Aplica-se a: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) e posterior) e Banco de dados SQL do AzureAzure SQL Database.INDEX Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later) and Banco de dados SQL do AzureAzure SQL Database).

Índices de coluna e tabela podem ser especificados como parte da instrução CREATE TABLE.Column and table indexes can be specified as part of the CREATE TABLE statement. Para obter detalhes sobre como adicionar e remover índices em tabelas com otimização de memória, confira: Alterando tabelas com otimização de memóriaFor details about adding and removing indexes on memory-optimized tables see: Altering Memory-Optimized Tables

HASHHASH
Aplica-se a: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) e posterior) e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later) and Banco de dados SQL do AzureAzure SQL Database.

Indica que um índice de HASH foi criado.Indicates that a HASH index is created.

Os índices de hash têm suporte apenas em tabelas com otimização de memória.Hash indexes are supported only on memory-optimized tables.

RemarksRemarks

Para obter informações sobre o número de tabelas, colunas, restrições e índices permitidos, veja Especificações de capacidade máxima para o SQL Server.For information about the number of allowed tables, columns, constraints and indexes, see Maximum Capacity Specifications for SQL Server.

Geralmente, o espaço é alocado a tabelas e índices em incrementos de uma extensão por vez.Space is generally allocated to tables and indexes in increments of one extent at a time. Quando a opção SET MIXED_PAGE_ALLOCATION de ALTER DATABASE é definida como TRUE ou sempre antes de SQL Server 2016 (13.x)SQL Server 2016 (13.x), quando uma tabela ou um índice é criado, são alocadas páginas de extensões mistas até que haja páginas suficientes para preencher uma extensão uniforme.When the SET MIXED_PAGE_ALLOCATION option of ALTER DATABASE is set to TRUE, or always prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x), when a table or index is created, it is allocated pages from mixed extents until it has enough pages to fill a uniform extent. Quando houver páginas suficiente para preencher um extensão uniforme, outra extensão será alocada sempre que as extensões já alocadas ficarem cheias.After it has enough pages to fill a uniform extent, another extent is allocated every time the currently allocated extents become full. Para um obter um relatório sobre a quantidade de espaço alocado e usado por uma tabela, execute sp_spaceused.For a report about the amount of space allocated and used by a table, execute sp_spaceused.

O Mecanismo de Banco de DadosDatabase Engine não impõe uma ordem para especificar DEFAULT, IDENTITY, ROWGUIDCOL ou restrições de coluna em uma definição de coluna.The Mecanismo de Banco de DadosDatabase Engine does not enforce an order in which DEFAULT, IDENTITY, ROWGUIDCOL, or column constraints are specified in a column definition.

Quando uma tabela é criada, a opção QUOTED IDENTIFIER sempre é armazenada como ON nos metadados da tabela, mesmo que a opção esteja definida como OFF quando a tabela é criada.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.

Tabelas temporáriasTemporary Tables

Você pode criar tabelas temporárias locais e globais.You can create local and global temporary tables. Tabelas temporárias locais são visíveis apenas na sessão atual e tabelas temporárias globais são visíveis em todas as sessões.Local temporary tables are visible only in the current session, and global temporary tables are visible to all sessions. Não é possível particionar tabelas temporárias.Temporary tables cannot be partitioned.

Prefixe os nomes de tabelas temporárias locais usando um único sinal numérico (#table_name) e prefixe os nomes de tabelas temporárias globais com dois sinais numéricos (##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).

As instruções Transact-SQLTransact-SQL referenciam a tabela temporária usando o valor especificado para table_name na instrução CREATE TABLE, por exemplo:Transact-SQLTransact-SQL statements reference the temporary table by using the value specified for table_name in the CREATE TABLE statement, for example:

CREATE TABLE #MyTempTable (
    col1 INT PRIMARY KEY
);

INSERT INTO #MyTempTable
VALUES (1);

Se mais de uma tabela temporária for criada em um procedimento armazenado ou lote, elas devem ter nomes diferentes.If more than one temporary table is created inside a single stored procedure or batch, they must have different names.

Se você incluir um schema_name quando criar ou acessar uma tabela temporária, ele será ignorado.If you include a schema_name when you create or access a temporary table, it is ignored. Todas as tabelas temporárias são criadas no esquema dbo.All temporary tables are created in the dbo schema.

Se uma tabela temporária local for criada em um procedimento armazenado ou aplicativo que pode ser executado ao mesmo tempo por vários usuários, o Mecanismo de Banco de DadosDatabase Engine deve ser capaz de distinguir as tabelas criadas por usuários distintos.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 Mecanismo de Banco de DadosDatabase Engine must be able to distinguish the tables created by the different users. O Mecanismo de Banco de DadosDatabase Engine faz isso acrescentando internamente um sufixo numérico a cada nome de tabela temporária local.The Mecanismo de Banco de DadosDatabase Engine does this by internally appending a numeric suffix to each local temporary table name. O nome completo de uma tabela temporária como ele foi armazenado na tabela sysobjects em tempdb é composto pelo nome da tabela especificado na instrução CREATE TABLE e o sufixo numérico gerado pelo sistema.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. Para permitir o sufixo, o table_name especificado para um nome temporário local não pode exceder 116 caracteres.To allow for the suffix, table_name specified for a local temporary name cannot exceed 116 characters.

As tabelas temporárias serão descartadas automaticamente se não se ultrapassarem o escopo, a menos que sejam explicitamente descartadas com o uso de DROP TABLE:Temporary tables are automatically dropped when they go out of scope, unless explicitly dropped by using DROP TABLE:

  • Uma tabela temporária local criada em um procedimento armazenado será descartada automaticamente quando o procedimento armazenado for encerrado.A local temporary table created in a stored procedure is dropped automatically when the stored procedure is finished. A tabela pode ser referenciada por qualquer procedimento armazenado aninhado executado pelo procedimento armazenado que criou a tabela.The table can be referenced by any nested stored procedures executed by the stored procedure that created the table. A tabela não pode ser referenciada pelo processo que chamou o procedimento armazenado que criou a tabela.The table cannot be referenced by the process that called the stored procedure that created the table.
  • Todas as outras tabelas temporárias locais serão descartadas automaticamente ao término da sessão atual.All other local temporary tables are dropped automatically at the end of the current session.
  • As tabelas temporárias globais serão descartadas automaticamente ao término da sessão que criou e quando todas as demais tarefas pararem de fazer referência a ela.Global temporary tables are automatically dropped when the session that created the table ends and all other tasks have stopped referencing them. A associação entre uma tarefa e uma tabela será mantida apenas enquanto durar uma única instrução Transact-SQLTransact-SQL.The association between a task and a table is maintained only for the life of a single Transact-SQLTransact-SQL statement. Ou seja, a tabela temporária global será descartada ao término da última instrução Transact-SQLTransact-SQL que estava referenciando ativamente a tabela ao término da sessão de criação.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.

Uma tabela temporária local criada em um procedimento armazenado ou gatilho pode ter o mesmo nome de uma tabela temporária que foi criada antes de o procedimento armazenado ou gatilho ser chamado.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. Contudo, se uma consulta fizer referência a uma tabela temporária e houver duas tabelas temporárias com o mesmo nome, não há definição de qual tabela servirá de base para a consulta.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. Procedimentos armazenados aninhados também podem criar tabelas temporárias com o mesmo nome de uma tabela temporária que foi criada pelo procedimento armazenado que o chamou.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. Entretanto, para que modificações sejam resolvidas na tabela que foi criada no procedimento aninhado, a tabela deve ter a mesma estrutura, com os mesmos nomes de colunas, da tabela criada pelo procedimento que o chamou.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. Isso é mostrado no exemplo a seguir.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

Aqui está o conjunto de resultados.Here is the result set.

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

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

Quando você cria tabelas temporárias locais ou globais, a sintaxe CREATE TABLE dá suporte a definições de restrição, exceto para restrições FOREIGN KEY.When you create local or global temporary tables, the CREATE TABLE syntax supports constraint definitions except for FOREIGN KEY constraints. Se for especificada uma restrição FOREIGN KEY em uma tabela temporária, a instrução retornará uma mensagem de aviso informando que a restrição foi ignorada.If a FOREIGN KEY constraint is specified in a temporary table, the statement returns a warning message that states the constraint was skipped. A tabela ainda será criada sem as restrições FOREIGN KEY.The table is still created without the FOREIGN KEY constraints. Tabelas temporárias não podem ser referenciadas em restrições FOREIGN KEY.Temporary tables cannot be referenced in FOREIGN KEY constraints.

Se uma tabela temporária for criada com uma restrição nomeada e se for criada dentro do escopo de uma transação definida pelo usuário, somente um usuário de cada vez poderá executar a instrução que cria a tabela temporária.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. Por exemplo, se um procedimento armazenado criar uma tabela temporária com uma restrição de chave primária nomeada, o procedimento armazenado não poderá ser executado simultaneamente por vários usuários.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.

Tabelas temporárias globais no escopo do banco de dados (Banco de Dados SQL do Azure)Database scoped global temporary tables (Azure SQL Database)

Tabelas temporárias globais para o SQL ServerSQL Server (iniciado com ## nome de tabela) são armazenadas em tempdb e compartilhadas entre as sessões de todos os usuários em toda a instância do 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. Para obter informações sobre tipos de tabela SQL, veja a seção acima em Criar tabelas.For information on SQL table types, see the above section on Create Tables.

O Banco de dados SQL do AzureAzure SQL Database é compatível com tabelas temporárias globais que também são armazenadas em tempdb e têm o escopo definido para o nível de banco de dados.Banco de dados SQL do AzureAzure SQL Database supports global temporary tables that are also stored in tempdb and scoped to the database level. Isso significa que as tabelas temporárias globais são compartilhadas para as sessões de todos os usuários no mesmo Banco de dados SQL do AzureAzure SQL Database.This means that global temporary tables are shared for all users' sessions within the same Banco de dados SQL do AzureAzure SQL Database. As sessões de usuário de outros bancos de dados não podem acessar tabelas temporárias globais.User sessions from other databases cannot access global temporary tables.

Tabelas temporárias globais para o Banco de dados SQL do AzureAzure SQL Database seguem a mesma sintaxe e a mesma semântica que o SQL ServerSQL Server usa para tabelas temporárias.Global temporary tables for Banco de dados SQL do AzureAzure SQL Database follow the same syntax and semantics that SQL ServerSQL Server uses for temporary tables. De modo similar, os procedimentos armazenados temporários globais também têm o escopo definido para o nível do Banco de dados SQL do AzureAzure SQL Database.Similarly, global temporary stored procedures are also scoped to the database level in Banco de dados SQL do AzureAzure SQL Database. Tabelas temporárias locais (iniciadas com # nome da tabela) também são compatíveis com o Banco de dados SQL do AzureAzure SQL Database e seguem a mesma sintaxe e a mesma semântica que o SQL ServerSQL Server usa.Local temporary tables (initiated with # table name) are also supported for Banco de dados SQL do AzureAzure SQL Database and follow the same syntax and semantics that SQL ServerSQL Server uses. Veja a seção acima em Tabelas temporárias.See the above section on Temporary Tables.

Importante

Este recurso está disponível no Banco de dados SQL do AzureAzure SQL Database.This feature is available for Banco de dados SQL do AzureAzure SQL Database.

Solucionando problemas de tabelas temporárias globais para o Banco de Dados SQL do AzureTroubleshooting global temporary tables for Azure SQL Database

Para solucionar problemas do tempdb, confira Como monitorar o uso do tempdb.For the troubleshooting the tempdb, see How to Monitor tempdb use.

Observação

Somente um administrador de servidor pode acessar as DMVs de solução de problemas em Banco de dados SQL do AzureAzure SQL Database.Only a server admin can access the troubleshooting DMVs in Banco de dados SQL do AzureAzure SQL Database.

PermissõesPermissions

Qualquer usuário pode criar objetos temporários globais.Any user can create global temporary objects. Os usuários podem acessar somente seus próprios objetos, a menos que recebam permissões adicionais.Users can only access their own objects, unless they receive additional permissions.

Tabelas particionadasPartitioned tables

Antes de criar uma tabela particionada usando CREATE TABLE, crie uma função de partição para especificar como a tabela será particionada.Before creating a partitioned table by using CREATE TABLE, you must first create a partition function to specify how the table becomes partitioned. Uma função de partição é criada usando CREATE PARTITION FUNCTION.A partition function is created by using CREATE PARTITION FUNCTION. Em seguida, crie um esquema de partição para especificar os grupos de arquivos que manterão as partições indicadas pela função de partição.Second, you must create a partition scheme to specify the filegroups that will hold the partitions indicated by the partition function. Um esquema de partição é criado usando CREATE PARTITION SCHEME.A partition scheme is created by using CREATE PARTITION SCHEME. O uso das restrições PRIMARY KEY ou UNIQUE para separar grupos de arquivos não pode ser especificado para tabelas particionadas.Placement of PRIMARY KEY or UNIQUE constraints to separate filegroups cannot be specified for partitioned tables. Para saber mais, confira Partitioned Tables and Indexes.For more information, see Partitioned Tables and Indexes.

Restrições PRIMARY KEYPRIMARY KEY Constraints

  • Uma tabela pode conter apenas uma restrição PRIMARY KEY.A table can contain only one PRIMARY KEY constraint.

  • O índice gerado pela restrição PRIMARY KEY não pode fazer com que o número de índices na tabela exceda 999 índices não clusterizados e 1 índice clusterizado.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.

  • Se CLUSTERED ou NONCLUSTERED não estiver especificado para uma restrição PRIMARY KEY, CLUSTERED será usado, se não houver índices clusterizados especificados para restrições 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.

  • Todas as colunas definidas em uma restrição PRIMARY KEY devem ser definidas como NOT NULL.All columns defined within a PRIMARY KEY constraint must be defined as NOT NULL. Se a nulidade não for especificada, todas as colunas participantes de uma restrição FOREIGN KEY devem ter sua nulidade definida como NOT NULL.If nullability is not specified, all columns participating in a PRIMARY KEY constraint have their nullability set to NOT NULL.

    Observação

    Para tabelas com otimização de memória, a coluna de chave NULLable é permitida.For memory-optimized tables, the NULLable key column is allowed.

  • Se a chave primária for definida em uma coluna de tipo CLR definida pelo usuário, a implementação do tipo deverá oferecer suporte a uma ordenação binária.If a primary key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. Para obter mais informações, veja Tipos CLR definidos pelo usuário.For more information, see CLR User-Defined Types.

Restrições UNIQUEUNIQUE Constraints

  • Se CLUSTERIZADO ou NONCLUSTERED não for especificado para uma restrição UNIQUE, NONCLUSTERED será usado por padrão.If CLUSTERED or NONCLUSTERED is not specified for a UNIQUE constraint, NONCLUSTERED is used by default.
  • Cada restrição UNIQUE gera um índice.Each UNIQUE constraint generates an index. O número de restrições UNIQUE não pode fazer com que o número de índices na tabela exceda 999 índices não clusterizados e 1 índice clusterizado.The number of UNIQUE constraints cannot cause the number of indexes on the table to exceed 999 nonclustered indexes and 1 clustered index.
  • Se a restrição unique for definida em uma coluna de tipo de dados CLR definido pelo usuário, a implementação do tipo deverá oferecer suporte a uma ordenação binária ou com base no operador.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. Para obter mais informações, veja Tipos CLR definidos pelo usuário.For more information, see CLR User-Defined Types.

Restrições de FOREIGN KEYFOREIGN KEY Constraints

  • Quando um valor diferente de NULL é inserido na coluna de uma restrição FOREIGN KEY, o valor deve existir na coluna referenciada; caso contrário, será retornada uma mensagem de erro de violação de chave estrangeira.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.

  • Restrições FOREIGN KEY serão aplicadas à coluna precedente, a menos que sejam especificadas colunas de origem.FOREIGN KEY constraints are applied to the preceding column, unless source columns are specified.

  • As restrições FOREIGN KEY só podem fazer referência a tabelas que estão no mesmo banco de dados e no mesmo servidor.FOREIGN KEY constraints can reference only tables within the same database on the same server. A integridade referencial em todos os bancos de dados deve ser implementada por gatilhos.Cross-database referential integrity must be implemented through triggers. Para mais informações, veja CREATE TRIGGER.For more information, see CREATE TRIGGER.

  • As restrições FOREIGN KEY podem fazer referência a outra coluna da mesma tabela.FOREIGN KEY constraints can reference another column in the same table. Isso se chama autorreferência.This is referred to as a self-reference.

  • A cláusula REFERENCES de uma restrição FOREIGN KEY no nível de coluna pode listar apenas uma coluna de referência.The REFERENCES clause of a column-level FOREIGN KEY constraint can list only one reference column. Essa coluna deve ter o mesmo tipo de dados da coluna na qual a restrição foi definida.This column must have the same data type as the column on which the constraint is defined.

  • O número de colunas de referência da cláusula REFERENCES de uma restrição FOREIGN KEY deve ser igual ao número de colunas da lista de colunas de restrição.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. O tipo de dados de cada coluna de referência também deve ser igual ao da coluna correspondente na lista de colunas.The data type of each reference column must also be the same as the corresponding column in the column list.

  • CASCADE, SET NULL ou SET DEFAULT não poderão ser especificados se uma coluna do tipo timestamp integrar a chave estrangeira ou a chave referenciada.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 e NO ACTION podem ser combinados nas tabelas que tenham relacionamentos referenciais entre si.CASCADE, SET NULL, SET DEFAULT and NO ACTION can be combined on tables that have referential relationships with each other. Se o Mecanismo de Banco de DadosDatabase Engine encontrar NO ACTION, parará e reverterá as ações CASCATA, SET NULL e SET DEFAULT.If the Mecanismo de Banco de DadosDatabase Engine encounters NO ACTION, it stops and rolls back related CASCADE, SET NULL and SET DEFAULT actions. Quando uma instrução DELETE provoca uma combinação de ações CASCADE, SET NULL, SET DEFAULT e NO ACTION, todas as ações CASCADE, SET NULL e SET DEFAULT são aplicadas antes que o Mecanismo de Banco de DadosDatabase Engine verifique se existe alguma 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 Mecanismo de Banco de DadosDatabase Engine checks for any NO ACTION.

  • O Mecanismo de Banco de DadosDatabase Engine não tem um limite predefinido quanto ao número de restrições FOREIGN KEY que uma tabela pode conter para referenciar outras tabelas nem quanto ao número de restrições FOREIGN KEY que são propriedade de outras tabelas e fazem referência a uma tabela específica.The Mecanismo de Banco de DadosDatabase 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.

    Entretanto, o número real de restrições FOREIGN KEY que pode ser usado é limitado pela configuração do hardware e pelo design do banco de dados e do aplicativo.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. Recomendamos que uma tabela não contenha mais de 253 restrições FOREIGN KEY e que ela não seja referenciada por mais de 253 restrições 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. O limite real pode depender mais ou menos do aplicativo e do hardware.The effective limit for you may be more or less depending on the application and hardware. Considere o custo da imposição de restrições FOREIGN KEY ao criar o banco de dados e os aplicativos.Consider the cost of enforcing FOREIGN KEY constraints when you design your database and applications.

  • As restrições FOREIGN KEY não são impostas a tabelas temporárias.FOREIGN KEY constraints are not enforced on temporary tables.

  • As restrições FOREIGN KEY podem fazer referência somente a colunas em restrições PRIMARY KEY ou UNIQUE na tabela ou em uma UNIQUE INDEX na tabela referenciada.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.

  • Se a chave estrangeira for definida em uma coluna de tipo de dados CLR definido pelo usuário, a implementação do tipo deverá oferecer suporte a uma ordenação binária.If a foreign key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. Para obter mais informações, veja Tipos CLR definidos pelo usuário.For more information, see CLR User-Defined Types.

  • As colunas que participam de uma relação de chave estrangeira devem ser definidas com o mesmo comprimento e a mesma escala.Columns participating in a foreign key relationship must be defined with the same length and scale.

definições DEFAULTDEFAULT definitions

  • Uma coluna pode ter apenas uma definição DEFAULT.A column can have only one DEFAULT definition.

  • Uma definição DEFAULT pode conter valores constantes, funções, funções niladic SQL padrão ou NULL.A DEFAULT definition can contain constant values, functions, SQL standard niladic functions, or NULL. A tabela a seguir mostra as funções niladic e os valores que elas retornam para o padrão durante uma instrução INSERT.The following table shows the niladic functions and the values they return for the default during an INSERT statement.

    funções niladic SQL-92SQL-92 niladic function Valor retornadoValue returned
    CURRENT_TIMESTAMPCURRENT_TIMESTAMP Data e hora atuais.Current date and time.
    CURRENT_USERCURRENT_USER Nome de usuário que está executando uma inserção.Name of user performing an insert.
    SESSION_USERSESSION_USER Nome de usuário que está executando uma inserção.Name of user performing an insert.
    SYSTEM_USERSYSTEM_USER Nome de usuário que está executando uma inserção.Name of user performing an insert.
    UsuárioUSER Nome de usuário que está executando uma inserção.Name of user performing an insert.
  • constant_expression em uma definição DEFAULT não pode fazer referência a uma outra coluna da tabela nem a outras tabelas, exibições ou procedimentos armazenados.constant_expression in a DEFAULT definition cannot refer to another column in the table, or to other tables, views, or stored procedures.

  • Não é possível criar definições DEFAULT em colunas com um tipo de dados timestamp ou colunas com uma propriedade IDENTITY.DEFAULT definitions cannot be created on columns with a timestamp data type or columns with an IDENTITY property.

  • Não é possível criar definições DEFAULT para colunas com tipos de dados do alias se o tipo de dados do alias estiver associado a um objeto padrão.DEFAULT definitions cannot be created for columns with alias data types if the alias data type is bound to a default object.

Restrições CHECKCHECK Constraints

  • Uma coluna pode ter qualquer número de restrições CHECK e os critérios podem incluir diversas expressões lógicas combinadas com AND e OR.A column can have any number of CHECK constraints, and the condition can include multiple logical expressions combined with AND and OR. Várias restrições CHECK são validadas na ordem de criação.Multiple CHECK constraints for a column are validated in the order they are created.

  • A avaliação do critério de pesquisa deve usar uma expressão Booleana como base e não pode fazer referência a outra tabela.The search condition must evaluate to a Boolean expression and cannot reference another table.

  • A restrição CHECK no nível de coluna pode fazer referência somente à coluna restrita, e a restrição CHECK no nível de tabela pode fazer referência somente às colunas da mesma tabela.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 CONSTRAINTS e regras oferecem a mesma função de validação dos dados durante instruções INSERT e UPDATE.CHECK CONSTRAINTS and rules serve the same function of validating the data during INSERT and UPDATE statements.

  • Se existirem uma regra e uma ou mais restrições CHECK para uma coluna, ou colunas, todas as restrições serão avaliadas.When a rule and one or more CHECK constraints exist for a column or columns, all restrictions are evaluated.

  • Restrições de verificação não podem ser definidas em colunas text, ntext ou image.CHECK constraints cannot be defined on text, ntext, or image columns.

Informações adicionais sobre restriçõesAdditional Constraint information

  • Um índice criado para uma restrição não pode ser descartado pelo uso de DROP INDEX; a restrição precisa ser descartada com o uso de ALTER TABLE.An index created for a constraint cannot be dropped by using DROP INDEX; the constraint must be dropped by using ALTER TABLE. Um índice criado para uma restrição e usado por ela pode ser reconstruído com o uso de ALTER INDEX ... REBUILD.An index created for and used by a constraint can be rebuilt by using ALTER INDEX ... REBUILD. Para obter mais informações, veja Reorganizar e recriar índices.For more information, see Reorganize and Rebuild Indexes.
  • Os nomes de restrição devem seguir as regras para identificadores, a não ser que o nome não possa começar com uma tecla jogo da velha (#).Constraint names must follow the rules for identifiers, except that the name cannot start with a number sign (#). Se constraint_name não for fornecido, um nome gerado pelo sistema será atribuído à restrição.If constraint_name is not supplied, a system-generated name is assigned to the constraint. O nome da restrição aparece em qualquer mensagem de erro sobre violações de restrição.The constraint name appears in any error message about constraint violations.
  • Quando uma restrição é violada em uma instrução INSERT, UPDATE ou DELETE, a instrução é encerrada.When a constraint is violated in an INSERT, UPDATE, or DELETE statement, the statement is ended. No entanto, quando SET XACT_ABORT é definido como OFF, a transação continuará sendo processada, se a instrução fizer parte de uma transação explícita.However, when SET XACT_ABORT is set to OFF, the transaction, if the statement is part of an explicit transaction, continues to be processed. Quando SET XACT_ABORT é definido como ON, a transação inteira é revertida.When SET XACT_ABORT is set to ON, the whole transaction is rolled back. Use também a instrução ROLLBACK TRANSACTION com a definição de transação verificando a função do sistema @@ERROR.You can also use the ROLLBACK TRANSACTION statement with the transaction definition by checking the @@ERROR system function.
  • Quando ALLOW_ROW_LOCKS = ON e ALLOW_PAGE_LOCK = ON, row-, page- e os bloqueios em nível de linha, página e tabela são permitidos quando você acessa o índice.When ALLOW_ROW_LOCKS = ON and ALLOW_PAGE_LOCK = ON, row-, page-, and table-level locks are allowed when you access the index. O Mecanismo de Banco de DadosDatabase Engine escolhe o bloqueio apropriado e pode escalar o bloqueio de uma linha ou página para um bloqueio de tabela.The Mecanismo de Banco de DadosDatabase Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock. Quando ALLOW_ROW_LOCKS = OFF e ALLOW_PAGE_LOCK = OFF, o bloqueio em nível de tabela é permitido quando você acessa o índice.When ALLOW_ROW_LOCKS = OFF and ALLOW_PAGE_LOCK = OFF, only a table-level lock is allowed when you access the index.
  • Se uma tabela tiver restrições FOREIGN KEY ou CHECK e gatilhos, os critérios da restrição serão avaliados antes da execução do gatilho.If a table has FOREIGN KEY or CHECK CONSTRAINTS and triggers, the constraint conditions are evaluated before the trigger is executed.

Para obter um relatório em uma tabela e suas colunas, use sp_help ou sp_helpconstraint.For a report on a table and its columns, use sp_help or sp_helpconstraint. Para renomear uma tabela, use sp_rename.To rename a table, use sp_rename. Para obter um relatório de exibições e procedimentos armazenados que dependem de uma tabela, use sys.dm_sql_referenced_entities e 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.

Regras de nulidade em uma definição de tabelaNullability rules within a table definition

A nulidade de uma coluna determina se ela permite valor nulo (NULL) como dados nessa coluna.The nullability of a column determines whether that column can allow a null value (NULL) as the data in that column. NULL não é zero nem em branco: NULL significa que nenhuma entrada foi feita nem um NULL explícito foi fornecido e, normalmente, implica que o valor é desconhecido ou não se aplica.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.

Quando você usa CREATE TABLE ou ALTER TABLE para criar ou alterar uma tabela, as configurações de banco de dados e de sessão influenciam e, possivelmente, substituem a nulidade do tipo de dados que é usado em uma definição de coluna.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. Recomendamos que você sempre defina explicitamente uma coluna como NULL ou NOT NULL para colunas não computadas ou, se usar um tipo de dados definido pelo usuário, permita que a coluna use a nulidade padrão do tipo de dados.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. Colunas esparsas sempre têm que permitir NULL.Sparse columns must always allow NULL.

Quando a nulidade da coluna não é especificada explicitamente, ela segue as regras mostradas na tabela a seguirWhen column nullability is not explicitly specified, column nullability follows the rules shown in the following table.

Tipo de dados da colunaColumn data type RegraRule
Tipo de dados de aliasAlias data type O Mecanismo de Banco de DadosDatabase Engine usa a nulidade especificada durante a criação do tipo de dados.The Mecanismo de Banco de DadosDatabase Engine uses the nullability that is specified when the data type was created. Para determinar a nulidade padrão do tipo de dados, use sp_help.To determine the default nullability of the data type, use sp_help.
tipo de dados CLR definido pelo usuárioCLR user-defined type A nulidade é determinada de acordo com a definição de coluna.Nullability is determined according to the column definition.
Tipo de dados fornecido pelo sistemaSystem-supplied data type Se o tipo de dados fornecido pelo sistema tiver apenas uma opção, ele prevalece.If the system-supplied data type has only one option, it takes precedence. Tipos de dados timestamp devem ser tipos de dados NOT NULL.timestamp data types must be NOT NULL. Quando qualquer configuração de sessão é definida como ON com o uso de SET:When any session settings are set ON by using SET:
ANSI_NULL_DFLT_ON = ON, NULL é atribuído.ANSI_NULL_DFLT_ON = ON, NULL is assigned.
ANSI_NULL_DFLT_OFF = ON, NOT NULL é atribuído.ANSI_NULL_DFLT_OFF = ON, NOT NULL is assigned.

Quando qualquer configuração de banco de dados for configurada com o uso de ALTER DATABASE:When any database settings are configured by using ALTER DATABASE:
ANSI_NULL_DEFAULT_ON = ON, NULL é atribuído.ANSI_NULL_DEFAULT_ON = ON, NULL is assigned.
ANSI_NULL_DEFAULT_OFF = ON, NOT NULL é atribuído.ANSI_NULL_DEFAULT_OFF = ON, NOT NULL is assigned.

Para exibir a configuração de banco de dados de ANSI_NULL_DEFAULT, use a exibição do catálogo sys.databasesTo view the database setting for ANSI_NULL_DEFAULT, use the sys.databases catalog view

Quando nenhuma das opções ANSI_NULL_DFLT estiver definida para a sessão e o banco de dados estiver configurado com o padrão (ANSI_NULL_DEFAULT é OFF), o padrão de NOT NULL será atribuído.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.

Se a coluna for uma coluna computada, seu nulidade sempre será determinada automaticamente pelo Mecanismo de Banco de DadosDatabase Engine.If the column is a computed column, its nullability is always automatically determined by the Mecanismo de Banco de DadosDatabase Engine. Para descobrir a nulidade desse tipo de coluna, use a função COLUMNPROPERTY com a propriedade AllowsNull.To find out the nullability of this type of column, use the COLUMNPROPERTY function with the AllowsNull property.

Observação

O driver ODBC e o driver OLE DB do SQL Server usam como padrão ANSI_NULL_DFLT_ON definido como ON.The SQL Server ODBC driver and SQL Server OLE DB driver both default to having ANSI_NULL_DFLT_ON set to ON. Os usuários de ODBC and OLE DB podem configurar essa opção nas fontes de dados ODBC ou usando os atributos ou as propriedades de conexão definidas pelo aplicativo.ODBC and OLE DB users can configure this in ODBC data sources, or with connection attributes or properties set by the application.

Data CompressionData Compression

Não é possível habilitar as tabelas do sistema para compactação.System tables cannot be enabled for compression. Quando você cria uma tabela, a compactação de dados é definida como NONE, a menos que especificada de outra maneira.When you are creating a table, data compression is set to NONE, unless specified otherwise. Se for especificada uma lista de partições ou uma partição fora do intervalo, um erro será gerado.If you specify a list of partitions or a partition that is out of range, an error will be generated. Para obter mais informações sobre compactação de dados, veja Compactação de dados.For a more information about data compression, see Data Compression.

Para avaliar como a alteração do estado de compactação afetará uma tabela, um índice ou uma partição, use o procedimento armazenado 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.

PermissõesPermissions

Exige a permissão CREATE TABLE no banco de dados e a permissão ALTER no esquema no qual a tabela está sendo criada.Requires CREATE TABLE permission in the database and ALTER permission on the schema in which the table is being created.

Se uma coluna da instrução CREATE TABLE for definida como um tipo definido pelo usuário, a permissão REFERENCES no tipo definido pelo usuário será necessária.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.

Se uma coluna da instrução CREATE TABLE for definida como um tipo de dados CLR definido pelo usuário, a propriedade do tipo ou a permissão REFERENCES será necessária.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.

Se uma coluna da instrução CREATE TABLE tiver uma coleção de esquemas XML associada a ela, a propriedade da coleção de esquemas XML ou a permissão REFERENCES será necessária.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.

Qualquer usuário pode criar tabelas temporárias no tempdb.Any user can create temporary tables in tempdb.

ExemplosExamples

A.A. Criar uma restrição PRIMARY KEY em uma colunaCreate a PRIMARY KEY constraint on a column

O exemplo a seguir mostra a definição de coluna para uma restrição PRIMARY KEY com um índice clusterizado na coluna EmployeeID da tabela 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. Como não foi especificado um nome de restrição, o sistema fornecerá o nome da restrição.Because a constraint name is not specified, the system supplies the constraint name.

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

B.B. Usando restrições FOREIGN KEYUsing FOREIGN KEY constraints

Uma restrição FOREIGN KEY é usada para fazer referência a outra tabela.A FOREIGN KEY constraint is used to reference another table. Chaves estrangeiras podem ser chaves de coluna única ou chaves de várias colunas.Foreign keys can be single-column keys or multicolumn keys. O próximo exemplo mostra uma restrição FOREIGN KEY de coluna única na tabela SalesOrderHeader que faz referência à tabela SalesPerson.This following example shows a single-column FOREIGN KEY constraint on the SalesOrderHeader table that references the SalesPerson table. Somente a cláusula REFERENCES é necessária para uma restrição FOREIGN KEY de coluna única.Only the REFERENCES clause is required for a single-column FOREIGN KEY constraint.

SalesPersonID INT NULL REFERENCES SalesPerson(SalesPersonID)

Também é possível usar explicitamente a cláusula FOREIGN KEY e declarar novamente o atributo de coluna.You can also explicitly use the FOREIGN KEY clause and restate the column attribute. Observe que o nome da coluna não tem que ser o mesmo em ambas as tabelas.Note that the column name does not have to be the same in both tables.

FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(SalesPersonID)

As restrições de chaves de várias colunas são criadas como restrições de tabela.Multicolumn key constraints are created as table constraints. No banco de dados AdventureWorks2012AdventureWorks2012, a tabela SpecialOfferProduct contém uma PRIMARY KEY de várias colunas.In the AdventureWorks2012AdventureWorks2012 database, the SpecialOfferProduct table includes a multicolumn PRIMARY KEY. O exemplo a seguir mostra como fazer referência a essa chave a partir de outra tabela; um nome de restrição explícito é opcional.The following example shows how to reference this key from another table; an explicit constraint name is optional.

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

C.C. Usando restrições UNIQUEUsing UNIQUE constraints

As restrições UNIQUE são usadas para impor exclusividade a colunas de chave não primária.UNIQUE constraints are used to enforce uniqueness on nonprimary key columns. O exemplo a seguir impõe uma restrição indicando que a coluna Name da tabela Product deve ser exclusiva.The following example enforces a restriction that the Name column of the Product table must be unique.

Name NVARCHAR(100) NOT NULL
UNIQUE NONCLUSTERED

D.D. Usando definições DEFAULTUsing DEFAULT definitions

Os padrões fornecem um valor (com as instruções INSERT e UPDATE) quando nenhum valor é fornecido.Defaults supply a value (with the INSERT and UPDATE statements) when no value is supplied. Por exemplo, o banco de dados AdventureWorks2012AdventureWorks2012 poderia conter uma tabela de pesquisa listando os diversos cargos que os funcionários podem ocupar na empresa.For example, the AdventureWorks2012AdventureWorks2012 database could include a lookup table listing the different jobs employees can fill in the company. Na coluna que descreve cada trabalho, uma cadeia de caracteres padrão poderia fornecer uma descrição se não for inserida explicitamente uma descrição real.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'

Além de constantes, definições DEFAULT podem incluir funções.In addition to constants, DEFAULT definitions can include functions. Use o exemplo a seguir para obter a data atual para uma entrada.Use the following example to get the current date for an entry.

DEFAULT (GETDATE())

Um exame da função niladic também pode melhorar a integridade dos dados.A niladic-function scan can also improve data integrity. Para monitorar o usuário que inseriu uma linha, use a função niladic para USER.To keep track of the user that inserted a row, use the niladic-function for USER. Não coloque as funções niladic entre parênteses.Do not enclose the niladic-functions with parentheses.

DEFAULT USER

E.E. Usando restrições CHECKUsing CHECK constraints

O exemplo a seguir mostra uma restrição composta pelos valores inseridos na coluna CreditRating da tabela Vendor.The following example shows a restriction made to values that are entered into the CreditRating column of the Vendor table. A restrição não é nomeada.The constraint is unnamed.

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

Este exemplo mostra uma restrição nomeada com um padrão de restrição nos dados de caracteres inseridos em uma coluna de uma tabela.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]'
)

Este exemplo especifica que os valores devem estar em uma lista específica ou seguir o padrão especificado.This example specifies that the values must be within a specific list or follow a specified pattern.

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

F.F. Mostrando a definição de tabela completaShowing the complete table definition

O próximo exemplo mostra as definições de tabela completas com todas as definições de restrição para a tabela PurchaseOrderDetail, criada no banco de dados AdventureWorks2012AdventureWorks2012.The following example shows the complete table definitions with all constraint definitions for table PurchaseOrderDetail created in the AdventureWorks2012AdventureWorks2012 database. Observe que para executar a amostra, o esquema de tabela foi alterado para dbo.Note that to run the sample, the table schema is changed to dbo.

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

G.G. Criando uma tabela com uma coluna de xml digitada para uma coleção de esquemas XMLCreating a table with an xml column typed to an XML schema collection

O exemplo seguinte cria uma tabela com uma coluna xml que é digitada para a coleção de esquemas XML HRResumeSchemaCollection.The following example creates a table with an xml column that is typed to XML schema collection HRResumeSchemaCollection. A palavra-chave DOCUMENT especifica que cada instância do tipo de dados xml em column_name pode conter apenas um elemento de nível superior.The DOCUMENT keyword specifies that each instance of the xml data type in column_name can contain only one top-level element.

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

H.H. Criando uma tabela particionadaCreating a partitioned table

O exemplo a seguir cria uma função de partição para dividir uma tabela ou índice em quatro partições.The following example creates a partition function to partition a table or index into four partitions. Em seguida, o exemplo cria um esquema de partição que especifica os grupos de arquivos que conterão cada uma das quatro partições.Then, the example creates a partition scheme that specifies the filegroups in which to hold each of the four partitions. Finalmente, o exemplo cria uma tabela que usa o esquema de partição.Finally, the example creates a table that uses the partition scheme. Este exemplo supõe que os grupos de arquivos já existam no banco de dados.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

Com base nos valores da coluna col1 de PartitionTable, as partições são atribuídas das seguintes maneiras.Based on the values of column col1 of PartitionTable, the partitions are assigned in the following ways.

Grupo de arquivosFilegroup test1fgtest1fg test2fgtest2fg test3fgtest3fg test4fgtest4fg
PartiçãoPartition 11 22 33 44
ValoresValues col 1 <= 1col 1 <= 1 col1 > 1 AND col1 <= 100col1 > 1 AND col1 <= 100 col1 > 100 AND col1 <= 1.000col1 > 100 AND col1 <= 1,000 col1 > 1000col1 > 1000

I.I. Usando o tipo de dados uniqueidentifier em uma colunaUsing the uniqueidentifier data type in a column

O exemplo a seguir cria uma tabela com uma coluna uniqueidentifier.The following example creates a table with a uniqueidentifier column. O exemplo usa uma restrição PRIMARY KEY para proteger a tabela, evitando que os usuários insiram valores duplicados, e usa a função NEWSEQUENTIALID() da restrição DEFAULT para fornecer valores para novas linhas.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. A propriedade ROWGUIDCOL é aplicada à coluna uniqueidentifier de forma que ela possa ser referenciada pela palavra-chave $ROWGUID.The ROWGUIDCOL property is applied to the uniqueidentifier column so that it can be referenced using the $ROWGUID keyword.

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

J.J. Usando uma expressão para uma coluna computadaUsing an expression for a computed column

O exemplo a seguir mostra o uso de uma expressão ((low + high)/2) para calcular a coluna computada myavg.The following example shows the use of an expression ((low + high)/2) for calculating the myavg computed column.

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

K.K. Criando uma coluna computada com base em uma coluna de tipo de dados definido pelo usuárioCreating a computed column based on a user-defined type column

O exemplo a seguir cria uma tabela com uma coluna definida como tipo de dados definido pelo usuário utf8string, supondo que o assembly do tipo, e o próprio tipo, já foram criados no banco de dados atual.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. Uma segunda coluna é definida com base em utf8string e usa o método ToString() de type(class) utf8string para computar um valor para a coluna.A second column is defined based on utf8string, and uses method ToString() of type(class)utf8string to compute a value for the column.

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

L.L. Usando uma função USER_NAME para uma coluna computadaUsing the USER_NAME function for a computed column

O exemplo a seguir usa a função USER_NAME() na coluna myuser_name.The following example uses the USER_NAME() function in the myuser_name column.

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

M.M. Criando uma tabela que possui uma coluna FILESTREAMCreating a table that has a FILESTREAM column

O exemplo a seguir cria uma tabela com uma coluna FILESTREAM Photo.The following example creates a table that has a FILESTREAM column Photo. Se uma tabela tiver uma ou mais colunas FILESTREAM, ela deve ter uma coluna ROWGUIDCOL.If a table has one or more FILESTREAM columns, the table must have one ROWGUIDCOL column.

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

N.N. Criando uma tabela que usa a compactação de linhaCreating a table that uses row compression

O exemplo a seguir cria uma tabela que usa compactação de linha.The following example creates a table that uses row compression.

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

Para obter exemplos de compactação de dados adicionais, consulte Compactação de dados.For additional data compression examples, see Data Compression.

O.O. Criando uma tabela que tem colunas esparsas e um conjunto de colunasCreating a table that has sparse columns and a column set

Os exemplos a seguir mostram como criar uma tabela com uma coluna esparsa e uma coluna com duas colunas esparsas e um conjunto de colunas.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. Os exemplos usam a sintaxe básica.The examples use the basic syntax. Para obter exemplos mais complexos, veja Usar colunas esparsas e Usar conjuntos de colunas.For more complex examples, see Use Sparse Columns and Use Column Sets.

Este exemplo cria uma tabela com uma coluna esparsa.This example creates a table that has a sparse column.

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

Este exemplo cria uma tabela com duas colunas esparsas e um conjunto de colunas nomeado CSet.This example creates a table that has two sparse columns and a column set named CSet.

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

P.P. Criando uma tabela temporal baseada em disco com controle de versão do sistemaCreating a system-versioned disk-based temporal table

Aplica-se a: SQL Server 2016 (13.x)SQL Server 2016 (13.x) e posterior e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later and Banco de dados SQL do AzureAzure SQL Database.

Os exemplos a seguir mostram como criar uma tabela temporal vinculada a uma nova tabela de histórico e como criar uma tabela temporal vinculada a uma tabela de histórico existente.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. Observe que a tabela temporal deve ter uma chave primária definida para ser habilitada para a tabela a ser habilitada para controle de versão do sistema.Note that the temporal table must have a primary key defined to be enabled for the table to be enabled for system versioning. Para obter exemplos mostrando como adicionar ou remover o controle de versão do sistema em uma tabela existente, veja controle de versão do sistema em Exemplos.For examples showing how to add or remove system versioning on an existing table, see System Versioning in Examples. Para casos de uso, veja Tabelas temporais.For use cases, see Temporal Tables.

Este exemplo cria uma nova tabela temporal vinculada a uma nova tabela de histórico.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);

Este exemplo cria uma nova tabela temporal vinculada a uma tabela de histórico existente.This example creates a new temporal table linked to an existing history table.

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

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

Q.Q. Criando uma tabela temporal com otimização de memória e controle de versão do sistemaCreating a system-versioned memory-optimized temporal table

Aplica-se a: SQL Server 2016 (13.x)SQL Server 2016 (13.x) e posterior e Banco de dados SQL do AzureAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later and Banco de dados SQL do AzureAzure SQL Database.

O exemplo a seguir mostra como criar uma versão do sistema com tabela temporal com otimização de memória vinculada a uma nova tabela de histórico baseada em disco.The following example shows how to create a system-versioned memory-optimized temporal table linked to a new disk-based history table.

Este exemplo cria uma nova tabela temporal vinculada a uma nova tabela de histórico.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)
);

Este exemplo cria uma nova tabela temporal vinculada a uma tabela de histórico existente.This example creates a new temporal table linked to an existing history table.

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

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

R.R. Criando uma tabela com colunas criptografadasCreating a table with encrypted columns

O exemplo a seguir cria uma tabela com duas colunas criptografadas.The following example creates a table with two encrypted columns. Para obter mais informações, consulte Always Encrypted.For more information, see Always Encrypted.

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

S.S. Criar um índice filtrado embutidoCreate an inline filtered index

Cria uma tabela com um índice filtrado embutido.Creates a table with an inline filtered index.

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

T.T. Criar um índice embutidoCreate an inline index

O seguinte exemplo mostra como usar NONCLUSTERED embutido em tabelas baseadas em disco:The following shows how to use NONCLUSTERED inline for disk-based tables:

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

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

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

U.U. Criar uma tabela temporária com a chave primária composta nomeada de forma anônimaCreate a temporary table with an anonymously named compound primary key

Criar uma tabela com a chave primária composta nomeada de forma anônima.Creates a table with an anonymously named compound primary key. Isso é útil para evitar conflitos de tempo de execução em que duas tabelas temporárias com escopo da sessão, cada uma em uma sessão separada, usam o mesmo nome para uma restrição.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

Se você nomear explicitamente a restrição, a segunda sessão gerará um erro, como: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.

O problema é que embora o nome da tabela temporária seja exclusivo, os nomes de restrição não são.The problem arises from the fact that while the temp table name is uniquified, the constraint names are not.

V.V. Usando tabelas temporárias globais no Banco de Dados SQL do AzureUsing global temporary tables in Azure SQL Database

A Sessão A cria uma tabela temporária global ##test no Banco de dados SQL do AzureAzure SQL Database testdb1 e adiciona 1 linhaSession A creates a global temp table ##test in Banco de dados SQL do 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';

Aqui está o conjunto de resultados.Here is the result set.

1253579504

Obter o nome da tabela temporária global para uma ID de objeto especificada 1253579504 em 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;

Aqui está o conjunto de resultados.Here is the result set.

##test

A Sessão B conecta-se ao Banco de dados SQL do AzureAzure SQL Database testdb1 e pode acessar a tabela ##test criado pela sessão ASession B connects to Banco de dados SQL do AzureAzure SQL Database testdb1 and can access table ##test created by session A

SELECT * FROM ##test;

Aqui está o conjunto de resultados.Here is the result set.

1, 1

A Sessão C conecta-se a outro banco de dados no Banco de dados SQL do AzureAzure SQL Database testdb2 e deseja acessar ##test criado em testdb1.Session C connects to another database in Banco de dados SQL do AzureAzure SQL Database testdb2 and wants to access ##test created in testdb1. Esta seleção falha devido ao escopo do banco de dados para as tabelas temporárias globaisThis select fails due to the database scope for the global temp tables

SELECT * FROM ##test

Que gera o seguinte erro:Which generates the following error:

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

Lidando com um objeto do sistema no Banco de dados SQL do AzureAzure SQL Database tempdb do banco de dados do usuário atual testdb1Addressing system object in Banco de dados SQL do 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;

Consulte TambémSee Also

ALTER TABLE COLUMNPROPERTY CREATE INDEX CREATE VIEW Data Types DROP INDEX sys.dm_sql_referenced_entities sys.dm_sql_referencing_entities DROP TABLE CREATE PARTITION FUNCTION CREATE PARTITION SCHEME CREATE TYPE EVENTDATA sp_help sp_helpconstraint sp_rename sp_spaceusedALTER TABLE COLUMNPROPERTY CREATE INDEX CREATE VIEW Data Types DROP INDEX sys.dm_sql_referenced_entities sys.dm_sql_referencing_entities DROP TABLE CREATE PARTITION FUNCTION CREATE PARTITION SCHEME CREATE TYPE EVENTDATA sp_help sp_helpconstraint sp_rename sp_spaceused