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

SE APLICA A: síSQL Server síAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Crea una nueva tabla en SQL ServerSQL Server y Base de datos SQL de AzureAzure SQL Database.Creates a new table in SQL ServerSQL Server and Base de datos SQL de AzureAzure SQL Database.

Nota

Para la sintaxis de Almacenamiento de datos SQLSQL Data Warehouse, vea CREATE TABLE (Azure SQL Data Warehouse).For Almacenamiento de datos SQLSQL Data Warehouse syntax, see CREATE TABLE (Azure SQL Data Warehouse).

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

Sintaxis simpleSimple Syntax

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

Sintaxis 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 database_name
Es el nombre de la base de datos en la que se crea la tabla.Is the name of the database in which the table is created. database_name debe especificar el nombre de una base de datos existente.database_name must specify the name of an existing database. Si no se especifica, database_name usa de manera predeterminada la base de datos actual.If not specified, database_name defaults to the current database. El inicio de sesión de la conexión actual debe estar asociado a un identificador de usuario existente en la base de datos especificada por database_name, y ese identificador de usuario debe tener permisos CREATE TABLE.The login for the current connection must be associated with an existing user ID in the database specified by database_name, and that user ID must have CREATE TABLE permissions.

schema_name schema_name
Es el nombre del esquema al que pertenece la nueva tabla.Is the name of the schema to which the new table belongs.

table_name table_name
Es el nombre de la nueva tabla.Is the name of the new table. Los nombres de las tablas deben seguir las reglas de los identificadores.Table names must follow the rules for identifiers. table_name puede contener un máximo de 128 caracteres, excepto para los nombres de tablas temporales locales (nombres precedidos de un único signo de número, #), que no pueden superar los 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 FileTableAS FileTable
Se aplica a: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) hasta SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

Crea la nueva tabla como un objeto FileTable.Creates the new table as a FileTable. No es necesario especificar columnas porque un objeto FileTable tiene un esquema fijo.You do not specify columns because a FileTable has a fixed schema. Para obtener más información, vea FileTables.For more information, see FileTables.

column_name column_name
computed_column_expression computed_column_expression
Es una expresión que define el valor de una columna calculada.Is an expression that defines the value of a computed column. Una columna calculada es una columna virtual que no está almacenada físicamente en la tabla, a menos que la columna esté marcada con PERSISTED.A computed column is a virtual column that is not physically stored in the table, unless the column is marked PERSISTED. La columna se calcula a partir de una expresión que utiliza otras columnas de la misma tabla.The column is computed from an expression that uses other columns in the same table. Por ejemplo, una columna calculada puede tener la definición cost AS price * qty. La expresión puede ser un nombre de columna no calculada, una constante, una función, una variable o cualquier combinación de estos elementos conectados mediante uno o más 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. La expresión no puede ser una subconsulta ni contener tipos de datos de alias.The expression cannot be a subquery or contain alias data types.

Las columnas calculadas se pueden usar en listas de selección, cláusulas WHERE, cláusulas ORDER BY u otras ubicaciones en que se puedan emplear expresiones regulares, con las siguientes excepciones: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:

  • Las columnas calculadas deben marcarse como PERSISTED para que puedan participar en restricciones FOREIGN KEY o CHECK.Computed columns must be marked PERSISTED to participate in a FOREIGN KEY or CHECK constraint.

  • Es posible usar una columna calculada como columna de clave en un índice o como parte de una restricción PRIMARY KEY o UNIQUE, si el valor de la columna calculada se define mediante una expresión determinista y el tipo de datos del resultado está permitido en columnas 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 ejemplo, si la tabla contiene las columnas de enteros a y b, la columna calculada a+b puede estar indizada, pero la columna calculada a+DATEPART(dd, GETDATE()) no puede indizarse porque el valor puede cambiar en las siguientes invocaciones.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.

  • Una columna calculada no puede ser el destino de una instrucción INSERT o UPDATE.A computed column cannot be the target of an INSERT or UPDATE statement.

Nota

Debido a que cada fila de una tabla puede tener distintos valores para las columnas implicadas en una columna calculada, la columna calculada puede no tener el mismo valor para cada fila.Each row in a table can have different values for columns that are involved in a computed column; therefore, the computed column may not have the same value for each row.

En función de las expresiones utilizadas, la nulabilidad de las columnas calculadas la determina automáticamente el Motor de base de datosDatabase Engine.Based on the expressions that are used, the nullability of computed columns is determined automatically by the Motor de base de datosDatabase Engine. Se considera que el resultado de la mayoría de las expresiones admite valores NULL incluso si únicamente están presentes columnas que no admiten valores NULL, ya que los posibles subdesbordamientos o desbordamientos también dan como resultado valores 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 la función COLUMNPROPERTY con la propiedad AllowsNull para determinar la nulabilidad de las columnas calculadas de la tabla.Use the COLUMNPROPERTY function with the AllowsNull property to investigate the nullability of any computed column in a table. Una expresión que admita valores NULL se puede convertir en una expresión que no los admita especificando ISNULL con la constante check_expression, donde la constante es un valor distinto de NULL que se sustituye por cualquier 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. Requiere el permiso REFERENCES sobre el tipo para las columnas calculadas basadas en expresiones de tipo definido por el usuario de Common Language Runtime (CLR).REFERENCES permission on the type is required for computed columns based on common language runtime (CLR) user-defined type expressions.

PERSISTEDPERSISTED
Especifica que Motor de base de datos de SQL ServerSQL Server Database Engine almacena físicamente los valores calculados en la tabla y actualiza los valores cuando se actualizan las columnas de las que depende la columna calculada.Specifies that the Motor de base de datos de 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. El hecho de marcar la columna calculada como PERSISTED le permite crear un índice en una columna calculada que es determinista, pero no precisa.Marking a computed column as PERSISTED lets you create an index on a computed column that is deterministic, but not precise. Para obtener más información, vea Indexes on Computed Columns.For more information, see Indexes on Computed Columns. Las columnas calculadas que se utilizan como columnas de partición en una tabla con particiones deben establecerse explícitamente en PERSISTED.Any computed columns that are used as partitioning columns of a partitioned table must be explicitly marked PERSISTED. computed_column_expression debe ser determinista cuando se especifique PERSISTED.computed_column_expression must be deterministic when PERSISTED is specified.

ON { partition_scheme | filegroup | "default" }ON { partition_scheme | filegroup | "default" }
Especifica el esquema de partición o el grupo de archivos en que se almacena la tabla.Specifies the partition scheme or filegroup on which the table is stored. Si se especifica partition_scheme, la tabla será una tabla con particiones cuyas particiones se almacenan en un conjunto de uno o más grupos de archivos especificados en partition_scheme.If partition_scheme is specified, the table is to be a partitioned table whose partitions are stored on a set of one or more filegroups specified in partition_scheme. Si se especifica filegroup, la tabla se almacena en el grupo de archivos con nombre.If filegroup is specified, the table is stored in the named filegroup. El grupo de archivos debe existir en la base de datos.The filegroup must exist within the database. Si se especifica "default" o si ON no se especifica en ninguna parte, la tabla se almacena en el grupo de archivos predeterminado.If "default" is specified, or if ON is not specified at all, the table is stored on the default filegroup. El mecanismo de almacenamiento de una tabla según se especifica en CREATE TABLE no se puede modificar posteriormente.The storage mechanism of a table as specified in CREATE TABLE cannot be subsequently altered.

ON {partition_scheme | filegroup | "default" } se puede especificar también en una restricción PRIMARY KEY o UNIQUE.ON {partition_scheme | filegroup | "default"} can also be specified in a PRIMARY KEY or UNIQUE constraint. Estas restricciones crean índices.These constraints create indexes. Si se especifica filegroup, el índice se almacena en el grupo de archivos con nombre.If filegroup is specified, the index is stored in the named filegroup. Si se especifica "default" o si ON no se especifica en ninguna parte, el índice se almacena en el mismo grupo de archivos que la tabla.If "default" is specified, or if ON is not specified at all, the index is stored in the same filegroup as the table. Si la restricción PRIMARY KEY o UNIQUE crea un índice clúster, las páginas de datos de la tabla se almacenan en el mismo grupo de archivos que el í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. Si se especifica CLUSTERED o la restricción crea un índice clúster, y se especifica un elemento partition_scheme distinto del partition_scheme o filegroup de la definición de tabla, o viceversa, únicamente se respeta la definición de restricción y se omite el resto.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.

Nota

En este contexto, default no es una palabra clave.In this context, default is not a keyword. Es un identificador para el grupo de archivos predeterminado y debe delimitarse, como en ON "default" o en ON [ default ] .It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [ default ]. Si se especifica "default" , la opción QUOTED_IDENTIFIER debe tener el valor ON para la sesión actual.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Esta es la configuración predeterminada.This is the default setting. Para más información, consulte SET QUOTED_IDENTIFIER.For more information, see SET QUOTED_IDENTIFIER.

Después de crear una tabla con particiones, considere la posibilidad de establecer la opción LOCK_ESCALATION para la tabla en AUTO.After you create a partitioned table, consider setting the LOCK_ESCALATION option for the table to AUTO. Esto puede mejorar la simultaneidad al permitir que los bloqueos se extiendan al nivel de partición (HoBT) en lugar de la tabla.This can improve concurrency by enabling locks to escalate to partition (HoBT) level instead of the table. Para más información, vea ALTER TABLE.For more information, see ALTER TABLE.

TEXTIMAGE_ON { filegroup| "default" }TEXTIMAGE_ON { filegroup| "default" }
Indica que las columnas text, ntext, image, xml, varchar(max) , nvarchar(max) , varbinary(max) y de tipo definido por el usuario CLR (incluidos los tipos geometry y geography) se almacenan en el grupo de archivos especificado.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.

No se permite TEXTIMAGE_ON si no hay columnas de valores grandes en la tabla.TEXTIMAGE_ON is not allowed if there are no large value columns in the table. No se puede especificar TEXTIMAGE_ON si se especifica partition_scheme.TEXTIMAGE_ON cannot be specified if partition_scheme is specified. Si se especifica "default" o si TEXTIMAGE_ON no se especifica en ninguna parte, las columnas de valores grandes se almacenan en el grupo de archivos predeterminado.If "default" is specified, or if TEXTIMAGE_ON is not specified at all, the large value columns are stored in the default filegroup. El almacenamiento de los datos de columna de valores grandes especificados en CREATE TABLE no se puede modificar posteriormente.The storage of any large value column data specified in CREATE TABLE cannot be subsequently altered.

Nota

Los valores varchar(max), nvarchar(max), varbinary(max), xml y los de tipo definido por el usuario de gran tamaño se almacenan directamente en la fila de datos, hasta un límite de 8000 bytes y siempre que el valor pueda caber en el 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. Si el valor no cabe en el registro, se almacena un puntero en la fila de manera consecutiva y el resto se almacena de forma no consecutiva en el espacio de almacenamiento 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 es el valor predeterminado, que indica que todos los valores se almacenan directamente en la fila de datos.0 is the default value, which indicates that all values are stored directly in the data row.

TEXTIMAGE_ON solo cambia la ubicación del "espacio de almacenamiento de LOB", pero no tiene ningún efecto si los datos se almacenan de forma consecutiva.TEXTIMAGE_ON only changes the location of the "LOB storage space", it does not affect when data is stored in-row. Use la opción de sp_tableoption de almacenar tipos de valores grandes de manera no consecutiva para almacenar todos valores de LOB de manera no consecutiva.Use large value types out of row option of sp_tableoption to store the entire LOB value out of the row.

En este contexto, el valor predeterminado no es una palabra clave.In this context, default is not a keyword. Es un identificador para el grupo de archivos predeterminado y debe delimitarse, como en TEXTIMAGE_ON "default" o en TEXTIMAGE_ON [default].It is an identifier for the default filegroup and must be delimited, as in TEXTIMAGE_ON "default" or TEXTIMAGE_ON [default]. Si se especifica "default" , la opción QUOTED_IDENTIFIER debe tener el valor ON para la sesión actual.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Esta es la configuración predeterminada.This is the default setting. Para más información, consulte SET QUOTED_IDENTIFIER.For more information, see SET QUOTED_IDENTIFIER.

FILESTREAM_ON { partition_scheme_name | grupo de archivos | " default " }FILESTREAM_ON { partition_scheme_name | filegroup | " default " }
Se aplica a: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 hasta SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 through SQL Server 2017SQL Server 2017). Base de datos SQL de AzureAzure SQL Database no admite FILESTREAM.does not support FILESTREAM.

Especifica el grupo de archivos para los datos FILESTREAM.Specifies the filegroup for FILESTREAM data.

Si la tabla contiene datos FILESTREAM y se crean particiones de la tabla, debe incluirse la cláusula FILESTREAM_ON y debe especificarse un esquema de partición de grupos de archivos 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. Este esquema de partición debe utilizar la misma función de partición y las mismas columnas de partición que el esquema de partición para la tabla; de lo contrario, se produce un error.This partition scheme must use the same partition function and partition columns as the partition scheme for the table; otherwise, an error is raised.

Si la tabla no tiene particiones, no se pueden crear particiones en la columna FILESTREAM.If the table is not partitioned, the FILESTREAM column cannot be partitioned. Los datos FILESTREAM para la tabla deben almacenarse en un grupo de archivos único.FILESTREAM data for the table must be stored in a single filegroup. Este grupo de archivos se especifica en la cláusula FILESTREAM_ON.This filegroup is specified in the FILESTREAM_ON clause.

Si la tabla no tiene particiones y no se especifica la cláusula FILESTREAM_ON, se utiliza el grupo de archivos FILESTREAM que tenga la propiedad DEFAULT establecida.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. Si no hay ningún grupo de archivos FILESTREAM, se produce un error.If there is no FILESTREAM filegroup, an error is raised.

Al igual que con ON y TEXTIMAGE_ON, el valor establecido utilizando CREATE TABLE para FILESTREAM_ON no se puede cambiar, excepto en los casos siguientes:As with ON and TEXTIMAGE_ON, the value set by using CREATE TABLE for FILESTREAM_ON cannot be changed, except in the following cases:

  • Una instrucción CREATE INDEX convierte un montón en un índice agrupado.A CREATE INDEX statement converts a heap into a clustered index. En este caso, se puede especificar un grupo de archivos FILESTREAM diferente, un esquema de partición o NULL.In this case, a different FILESTREAM filegroup, partition scheme, or NULL can be specified.
  • Una instrucción DROP INDEX convierte un índice agrupado en un montón.A DROP INDEX statement converts a clustered index into a heap. En este caso, se puede especificar otro grupo de archivos FILESTREAM, otro esquema de partición o "default" .In this case, a different FILESTREAM filegroup, partition scheme, or "default" can be specified.

El grupo de archivos en la cláusula FILESTREAM_ON <filegroup>, o cada grupo de archivos FILESTREAM que se mencione en el esquema de partición, debe tener un archivo definido para el grupo de archivos.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. Este archivo se debe definir mediante una instrucción CREATE DATABASE o ALTER DATABASE; en caso contrario, se produce un error.This file must be defined by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

Si quiere consultar temas sobre FILESTREAM relacionados, vea Datos de objeto binario grande (Blob) (SQL Server).For related FILESTREAM topics, see Binary Large Object - Blob Data.

[ type_schema_name .[ type_schema_name. ] type_name ] type_name
Especifica el tipo de datos de la columna y el esquema al que pertenece.Specifies the data type of the column, and the schema to which it belongs. Para las tablas basadas en disco, el tipo de datos puede ser uno de los siguientes:For disk-based tables, the data type can be one of the following:

  • Un tipo de datos del sistemaA system data type
  • Un tipo de alias basado en un tipo de datos del sistema de SQL ServerSQL Server.An alias type based on a SQL ServerSQL Server system data type. Los tipos de datos de alias se crean con la instrucción CREATE TYPE antes de que puedan utilizarse en una definición de tabla.Alias data types are created with the CREATE TYPE statement before they can be used in a table definition. La asignación NULL o NOT NULL de un tipo de datos de alias puede invalidarse durante la instrucción CREATE TABLE.The NULL or NOT NULL assignment for an alias data type can be overridden during the CREATE TABLE statement. No obstante, la especificación de longitud no se puede cambiar; la longitud del tipo de datos de alias no se puede especificar en una instrucción CREATE TABLE.However, the length specification cannot be changed; the length for an alias data type cannot be specified in a CREATE TABLE statement.
  • Un tipo definido por el usuario CLR.A CLR user-defined type. Los tipos definidos por el usuario CLR se crean con la instrucción CREATE TYPE para poder utilizarlos en una definición de tabla.CLR user-defined types are created with the CREATE TYPE statement before they can be used in a table definition. Para crear una columna en un tipo definido por el usuario CLR, se necesita el permiso REFERENCES para el tipo.To create a column on CLR user-defined type, REFERENCES permission is required on the type.

Si no se especifica type_schema_name, Motor de base de datos de SQL ServerSQL Server Database Engine hace referencia a type_name en este orden:If type_schema_name is not specified, the Motor de base de datos de SQL ServerSQL Server Database Engine references type_name in the following order:

  • El tipo de datos del sistema de SQL ServerSQL Server.The SQL ServerSQL Server system data type.
  • El esquema predeterminado del usuario actual en la base de datos actual.The default schema of the current user in the current database.
  • El esquema dbo de la base de datos actual.The dbo schema in the current database.

Para las tablas optimizadas para memoria, vea Tipos de datos admitidos para OLTP en memoria para obtener una lista de tipos del sistema admitidos.For memory-optimized tables, see Supported Data Types for In-Memory OLTP for a list of supported system types.

precision precision
Es la precisión del tipo de datos especificado.Is the precision for the specified data type. Para más información sobre los valores de precisión válidos, vea Precisión, escala y longitud.For more information about valid precision values, see Precision, Scale, and Length.

scale scale
Es la escala del tipo de datos especificado.Is the scale for the specified data type. Para más información sobre los valores de escala válidos, vea Precisión, escala y longitud.For more information about valid scale values, see Precision, Scale, and Length.

max max
Solo se aplica a los tipos de datos varchar, nvarchar y varbinary para el almacenamiento de 2^31 bytes de caracteres y datos binarios, y 2^30 bytes de datos 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 instancia del tipo de datos xml en column_name puede incluir varios elementos de nivel superior.Specifies that each instance of the xml data type in column_name can contain multiple top-level elements. CONTENT se aplica solamente al tipo de datos xml y únicamente se puede especificar si también se especifica xml_schema_collection.CONTENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified. Si no se especifica, CONTENT es el comportamiento predeterminado.If not specified, CONTENT is the default behavior.

DOCUMENTDOCUMENT
Especifica que cada instancia del tipo de datos xml en column_name puede incluir un solo elemento de nivel superior.Specifies that each instance of the xml data type in column_name can contain only one top-level element. DOCUMENT se aplica solamente al tipo de datos xml y únicamente se puede especificar si también se especifica xml_schema_collection.DOCUMENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified.

xml_schema_collection xml_schema_collection
Solo se aplica al tipo de datos xml para asociar una colección de esquemas XML al tipo.Applies only to the xml data type for associating an XML schema collection with the type. Antes de escribir una columna xml para un esquema, primero debe crear el esquema en la base de datos mediante 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 el valor suministrado para la columna cuando no se ha especificado explícitamente un valor durante una inserción.Specifies the value provided for the column when a value is not explicitly supplied during an insert. Las definiciones DEFAULT se pueden aplicar a cualquier columna, excepto las definidas como timestamp o aquellas que tengan la propiedad IDENTITY.DEFAULT definitions can be applied to any columns except those defined as timestamp, or those with the IDENTITY property. Si se especifica un valor predeterminado para una columna de un tipo definido por el usuario, dicho tipo debe admitir la conversión implícita de constant_expression al tipo definido por el usuario.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. Las definiciones DEFAULT desaparecen cuando se quita la tabla.DEFAULT definitions are removed when the table is dropped. Como valor predeterminado solo se puede utilizar un valor constante, por ejemplo una cadena de caracteres, una función escalar (función del sistema, definida por el usuario o CLR) o NULL.Only a constant value, such as a character string; a scalar function (either a system, user-defined, or CLR function); or NULL can be used as a default. Para mantener la compatibilidad con las versiones anteriores de SQL ServerSQL Server, se puede asignar un nombre de restricción a DEFAULT.To maintain compatibility with earlier versions of SQL ServerSQL Server, a constraint name can be assigned to a DEFAULT.

constant_expression constant_expression
Es una constante, NULL o una función del sistema que se utiliza como valor predeterminado de una columna.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
Es una constante, NULL o una función del sistema que se admite como valor predeterminado de una columna.Is a constant, NULL, or a system function that is supported in used as the default value for the column. Debe admitirse en los procedimientos almacenados compilados de forma nativa.Must be supported in natively compiled stored procedures. Para más información sobre las funciones integradas en procedimientos almacenados compilados de forma nativa, vea Características admitidas en los módulos T-SQL compilados de forma nativa.For more information about built-in functions in natively compiled stored procedures, see Supported Features for Natively Compiled T-SQL Modules.

IDENTITYIDENTITY
Indica que la nueva columna es una columna de identidad.Indicates that the new column is an identity column. Cuando se agrega una fila nueva a la tabla, el Motor de base de datosDatabase Engine proporciona un valor incremental único para la columna.When a new row is added to the table, the Motor de base de datosDatabase Engine provides a unique, incremental value for the column. Las columnas de identidad se utilizan normalmente con las restricciones PRIMARY KEY como identificadores de fila únicos de la tabla.Identity columns are typically used with PRIMARY KEY constraints to serve as the unique row identifier for the table. La propiedad IDENTITY se puede asignar a columnas tinyint, smallint, int, bigint, decimal(p,0) o numeric(p,0) .The IDENTITY property can be assigned to tinyint, smallint, int, bigint, decimal(p,0), or numeric(p,0) columns. Solo se puede crear una columna de identidad para cada tabla.Only one identity column can be created per table. Las restricciones DEFAULT y los valores predeterminados enlazados no se pueden utilizar en las columnas de identidad.Bound defaults and DEFAULT constraints cannot be used with an identity column. En este caso, deben especificarse el valor de inicialización y el incremento, o ninguno de esto valores.Both the seed and increment or neither must be specified. Si no se especifica ninguno, el valor predeterminado es (1,1).If neither is specified, the default is (1,1).

seed seed
Es el valor que se utiliza para la primera fila cargada en la tabla.Is the value used for the very first row loaded into the table.

increment increment
Es el valor incremental que se agrega al valor de identidad de la fila cargada anterior.Is the incremental value added to the identity value of the previous row loaded.

NOT FOR REPLICATIONNOT FOR REPLICATION
En la instrucción CREATE TABLE, la cláusula NOT FOR REPLICATION se puede especificar para la propiedad IDENTITY, las restricciones FOREIGN KEY y las restricciones CHECK.In the CREATE TABLE statement, the NOT FOR REPLICATION clause can be specified for the IDENTITY property, FOREIGN KEY constraints, and CHECK constraints. Si se especifica esta cláusula para la propiedad IDENTITY, los valores no se incrementan en las columnas de identidad cuando los agentes de replicación realizan inserciones.If this clause is specified for the IDENTITY property, values are not incremented in identity columns when replication agents perform inserts. Si se especifica esta cláusula para una restricción, la restricción no se aplica cuando los agentes de replicación realizan operaciones de inserción, actualización o eliminación.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 ]
Se aplica a: SQL ServerSQL Server (de SQL Server 2016 (13.x)SQL Server 2016 (13.x) a SQL Server 2017SQL Server 2017) y a Base de datos SQL de AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Base de datos SQL de AzureAzure SQL Database.

Especifica que el sistema usará una determinada columna datetime2 para registrar la hora de inicio o de finalización para las que un registro es 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. La columna debe definirse como NOT NULL.The column must be defined as NOT NULL. Si intenta especificarlas como NULL, el sistema producirá un error.If you attempt to specify them as NULL, the system will throw an error. Si no especifica explícitamente NOT NULL para una columna de período, el sistema definirá la columna como NOT NULL de forma predeterminada.If you do not explicitly specify NOT NULL for a period column, the system will define the column as NOT NULL by default. Utilice este argumento junto con los argumentos PERIOD FOR SYSTEM_TIME y WITH SYSTEM_VERSIONING = ON para habilitar el control de versiones del sistema en una tabla.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 obtener más información, consulte Temporal Tables.For more information, see Temporal Tables.

Los usuarios pueden marcar una o ambas columnas de período con la marca HIDDEN para ocultarlas implícitamente, de modo que SELECT * FROM <table> no devuelva ningún valor para esas columnas.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. De forma predeterminada, no se ocultan las columnas de período.By default, period columns are not hidden. Para poder usar las columnas ocultas, deben incluirse explícitamente en todas las consultas que hacen referencia directa a la tabla temporal.In order to be used, hidden columns must be explicitly included in all queries that directly reference the temporal table. Para cambiar el atributo HIDDEN para una columna de período existente, debe quitarse PERIOD y volver a crearlo con una etiqueta oculta distinta.To change the HIDDEN attribute for an existing period column, PERIOD must be dropped and recreated with a different hidden flag.

INDEX index_name [ CLUSTERED | NONCLUSTERED ] (column_name [ ASC | DESC ] [ ,... n ] )INDEX index_name [ CLUSTERED | NONCLUSTERED ] (column_name [ ASC | DESC ] [ ,... n ] )
Se aplica a: SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) a SQL Server 2017SQL Server 2017) y a Base de datos SQL de AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Base de datos SQL de AzureAzure SQL Database.

Especifica que se creará un índice en la tabla.Specifies to create an index on the table. Puede tratarse de un índice agrupado o un índice que no esté en clúster.This can be a clustered index, or a nonclustered index. El índice incluirá las columnas enumeradas y ordenará los datos en orden ascendente o descendente.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
Se aplica a: SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) a SQL Server 2017SQL Server 2017) y a Base de datos SQL de AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Base de datos SQL de AzureAzure SQL Database.

Especifica que se almacenará toda la tabla en formato de columnas con un índice de almacén de columnas agrupado.Specifies to store the entire table in columnar format with a clustered columnstore index. Esto siempre incluye todas las columnas de la tabla.This always includes all columns in the table. Los datos no se ordenan en orden alfabético o numérico, ya que las filas se organizan para obtener las ventajas de la compresión de almacén de columnas.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 ] )
Se aplica a: SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) a SQL Server 2017SQL Server 2017) y a Base de datos SQL de AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Base de datos SQL de AzureAzure SQL Database.

Especifica que se creará un índice de almacén de columnas no en clúster en la tabla.Specifies to create a nonclustered columnstore index on the table. La tabla subyacente puede ser un montón de almacenamiento de filas o un índice agrupado, o incluso puede ser un índice de almacén de columnas agrupado.The underlying table can be a rowstore heap or clustered index, or it can be a clustered columnstore index. En todos los casos, al crear un índice de almacén de columnas no en clúster en una tabla, se almacena una segunda copia de los datos de las columnas en el í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.

El índice de almacén de columnas no en clúster se almacena y administra como un índice de almacén de columnas agrupado.The nonclustered columnstore index is stored and managed as a clustered columnstore index. Se denomina índice de almacén de columnas no en clúster porque las columnas pueden ser limitadas y está presente como un índice secundario en una tabla.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 el esquema de partición que define los grupos de archivos a los que se asignarán las particiones de un índice con particiones.Specifies the partition scheme that defines the filegroups onto which the partitions of a partitioned index will be mapped. El esquema de partición debe existir dentro de la base de datos mediante la ejecución de CREATE PARTITION SCHEME o ALTER PARTITION SCHEME.The partition scheme must exist within the database by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. column_name especifica la columna en la que se van a crear las particiones de un índice con particiones.column_name specifies the column against which a partitioned index will be partitioned. Esta columna debe coincidir con el tipo de datos, la longitud y la precisión del argumento de la función de partición que partition_scheme_name emplea.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 no está limitado a las columnas de la definición de índice.column_name is not restricted to the columns in the index definition. Se puede especificar cualquier columna de la tabla base, excepto en el caso de partición de un índice UNIQUE, en el que se debe elegir column_name entre las columnas usadas como clave única.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. Esta restricción permite que Motor de base de datosDatabase Engine compruebe la unicidad de los valores de clave en una única partición solamente.This restriction allows the Motor de base de datosDatabase Engine to verify uniqueness of key values within a single partition only.

Nota

Cuando se crean particiones en un índice clúster no único, Motor de base de datosDatabase Engine agrega de forma predeterminada la columna de partición a la lista de claves del índice clúster, en caso de que aún no se hubiera especificado.When you partition a non-unique, clustered index, the Motor de base de datosDatabase Engine by default adds the partitioning column to the list of clustered index keys, if it is not already specified. Cuando se crean particiones en un índice no clúster que tampoco es único, Motor de base de datosDatabase Engine agrega la columna de partición como una columna sin clave (incluida) del índice, si aún no se especificó.When partitioning a non-unique, nonclustered index, the Motor de base de datosDatabase Engine adds the partitioning column as a non-key (included) column of the index, if it is not already specified.

Si no se especificó partition_scheme_name o filegroup y se crearon particiones en la tabla, el índice se coloca en el mismo esquema de partición y usa la misma columna de partición que en la tabla subyacente.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.

Nota

No se puede especificar un esquema de partición en un índice XML.You cannot specify a partitioning scheme on an XML index. Si se crean particiones en la tabla base, el índice XML usa el mismo esquema de partición que la tabla.If the base table is partitioned, the XML index uses the same partition scheme as the table.

Para más información sobre los índices con particiones, vea Tablas e índices con particiones.For more information about partitioning indexes, Partitioned Tables and Indexes.

ON filegroup_name ON filegroup_name
Crea el índice especificado en el grupo de archivos especificado.Creates the specified index on the specified filegroup. Si no se ha especificado una ubicación y la tabla o vista no tiene particiones, el índice utiliza el mismo grupo de archivos que la tabla o vista subyacente.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. El grupo de archivos debe existir previamente.The filegroup must already exist.

ON "default" ON "default"
Crea el índice especificado en el grupo de archivos predeterminado.Creates the specified index on the default filegroup.

El término predeterminado (default), en este contexto, no es una palabra clave.The term default, in this context, is not a keyword. Es un identificador para el grupo de archivos predeterminado y debe delimitarse, como en ON "default" o en ON [default] .It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [default]. Si se especifica "default", la opción QUOTED_IDENTIFIER debe tener el valor ON para la sesión actual.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Esta es la configuración predeterminada.This is the default setting. Para más información, consulte 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" } ]
Se aplica a: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 hasta SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 through SQL Server 2017SQL Server 2017).

Especifica la posición de datos FILESTREAM para la tabla cuando se crea un índice clúster.Specifies the placement of FILESTREAM data for the table when a clustered index is created. La cláusula FILESTREAM_ON permite mover los datos FILESTREAM a otro esquema de partición o a otro grupo de archivos FILESTREAM.The FILESTREAM_ON clause allows FILESTREAM data to be moved to a different FILESTREAM filegroup or partition scheme.

filestream_filegroup_name es el nombre de un grupo de archivos FILESTREAM.filestream_filegroup_name is the name of a FILESTREAM filegroup. El grupo de archivos debe tener un archivo definido para el grupo de archivos, usando para ello las instrucciones CREATE DATABASE o ALTER DATABASE; en caso contrario, se produce un error.The filegroup must have one file defined for the filegroup by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

Si se crean particiones de la tabla, la cláusula FILESTREAM_ON deberá incluirse y especificar un esquema de partición de grupos de archivos FILESTREAM que utilice la misma función de partición y columnas de partición que el esquema de partición para la tabla.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. En caso contrario, se produce un error.Otherwise, an error is raised.

Si la tabla no tiene particiones, no se pueden crear particiones en la columna FILESTREAM.If the table is not partitioned, the FILESTREAM column cannot be partitioned. Los datos FILESTREAM para la tabla deben estar almacenados en un grupo de archivos único que se especifica en la 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 se puede especificar en una instrucción CREATE INDEX si se va a crear un índice clúster y la tabla no contiene una columna 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 obtener más información, vea FILESTREAM.For more information, see FILESTREAM.

ROWGUIDCOLROWGUIDCOL
Indica que la nueva columna es una columna de GUID de filas.Indicates that the new column is a row GUID column. Solo se puede designar una columna uniqueidentifier por tabla como columna ROWGUIDCOL.Only one uniqueidentifier column per table can be designated as the ROWGUIDCOL column. Si se aplica la propiedad ROWGUIDCOL, se puede hacer referencia a la columna mediante $ROWGUID.Applying the ROWGUIDCOL property enables the column to be referenced using $ROWGUID. La propiedad ROWGUIDCOL únicamente se puede asignar a una columna uniqueidentifier.The ROWGUIDCOL property can be assigned only to a uniqueidentifier column. Las columnas de tipos de datos definidos por el usuario no se pueden designar con ROWGUIDCOL.User-defined data type columns cannot be designated with ROWGUIDCOL.

La propiedad ROWGUIDCOL no exige que los valores almacenados en la columna sean únicos.The ROWGUIDCOL property does not enforce uniqueness of the values stored in the column. ROWGUIDCOL tampoco genera automáticamente valores para nuevas filas insertadas en la tabla.ROWGUIDCOL also does not automatically generate values for new rows inserted into the table. Para generar valores únicos para cada columna, use la función NEWID or NEWSEQUENTIALID en instrucciones INSERT o use estas funciones como valor predeterminado de la columna.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 columnas de cifrado mediante la característica Always Encrypted.Specifies encrypting columns by using the Always Encrypted feature.

COLUMN_ENCRYPTION_KEY = key_name COLUMN_ENCRYPTION_KEY = key_name
Especifica la clave de cifrado de columna.Specifies the column encryption key. Para obtener más información, vea CREATE COLUMN ENCRYPTION KEY.For more information, see CREATE COLUMN ENCRYPTION KEY.

ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }
Elcifrado determinista usa un método que genera siempre el mismo valor cifrado para cualquier valor de texto no cifrado concreto.Deterministic encryption uses a method which always generates the same encrypted value for any given plain text value. Al usar cifrado determinista se pueden realizar búsquedas mediante comparación de igualdad, agrupar y unir tablas mediante combinaciones de igualdad basadas en valores cifrados, y además se puede permitir a usuarios no autorizados que averigüen la información sobre valores cifrados mediante el análisis de patrones en la columna cifrada.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. La combinación de dos tablas en columnas cifradas de manera determinista solo es posible si ambas columnas están cifradas con la misma clave de cifrado de columna.Joining two tables on columns encrypted deterministically is only possible if both columns are encrypted using the same column encryption key. El cifrado determinista debe usar una intercalación de columna con un criterio de ordenación binario 2 para columnas de caracteres.Deterministic encryption must use a column collation with a binary2 sort order for character columns.

Elcifrado aleatorio utiliza un método que cifra los datos de una manera menos predecible.Randomized encryption uses a method that encrypts data in a less predictable manner. El cifrado aleatorio es más seguro, pero impide todos los cálculos y la indexación en columnas cifradas, a menos que la instancia de SQL Server admita Always Encrypted con 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. Para más información, vea Always Encrypted con enclaves seguros.Please see Always Encrypted with secure enclaves for details.

Si usa Always Encrypted (sin los enclaves seguros), utilice el cifrado determinista para que se busquen columnas con parámetros o parámetros de agrupación, por ejemplo, un número de identificación gubernamental.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 el cifrado aleatorio para datos como números de tarjeta de crédito, que no estén agrupados con otros registros ni se estén usando para combinar tablas, y en los que no se realicen búsquedas porque se estén usando otras columnas (por ejemplo, un número de transacción) para buscar la fila que contiene la columna cifrada en cuestión.Use randomized encryption, for data such as a credit card number, which is not grouped with other records or used to join tables, and which is not searched for because you use other columns (such as a transaction number) to find the row which contains the encrypted column of interest.

Si usa Always Encrypted con enclaves seguros, se recomienda, por ejemplo, el cifrado aleatorio.If you are using Always Encrypted with secure enclaves, randomized encryption is a recommended encryption type.

Las columnas deben ser de un tipo de datos aplicable.Columns must be of a qualifying data type.

ALGORITHMALGORITHM
Se aplica a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) hasta SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017).

Debe ser 'AEAD_AES_256_CBC_HMAC_SHA_256' .Must be 'AEAD_AES_256_CBC_HMAC_SHA_256'.

Para más información, incluidas restricciones de características, vea Always Encrypted.For more information including feature constraints, see Always Encrypted.

SPARSESPARSE
Indica que la columna es una columna dispersa.Indicates that the column is a sparse column. El almacenamiento de columnas dispersas está optimizado para los valores NULL.The storage of sparse columns is optimized for null values. Las columnas dispersas no se pueden designar como NOT NULL.Sparse columns cannot be designated as NOT NULL. Para conocer otras restricciones y leer más información sobre columnas dispersas, vea Usar columnas dispersas.For additional restrictions and more information about sparse columns, see Use Sparse Columns.

MASKED WITH ( FUNCTION = ' mask_function ')MASKED WITH ( FUNCTION = ' mask_function ')
Se aplica a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) hasta SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017).

Especifica una máscara dinámica de datos.Specifies a dynamic data mask. mask_function es el nombre de la función de máscara con los parámetros adecuados.mask_function is the name of the masking function with the appropriate parameters. Hay cuatro funciones disponibles:Four functions are available:

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

Para conocer más parámetros de función, vea Enmascaramiento de datos dinámicos.For function parameters, see Dynamic Data Masking.

FILESTREAMFILESTREAM
Se aplica a: SQL ServerSQL Server (de SQL Server 2008 R2SQL Server 2008 R2 a SQL Server 2017SQL Server 2017)Applies to: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 through SQL Server 2017SQL Server 2017)

Válido únicamente para columnas varbinary (max) .Valid only for varbinary(max) columns. Especifica el almacenamiento FILESTREAM para los datos de BLOB varbinary(max) .Specifies FILESTREAM storage for the varbinary(max) BLOB data.

La tabla también debe tener una columna del tipo de datos uniqueidentifier que tenga el atributo ROWGUIDCOL.The table must also have a column of the uniqueidentifier data type that has the ROWGUIDCOL attribute. Esta columna no debe permitir valores nulos y debe tener una restricción de columna única UNIQUE o PRIMARY KEY.This column must not allow null values and must have either a UNIQUE or PRIMARY KEY single-column constraint. El valor de GUID de la columna lo debe proporcionar una aplicación cuando se inserten datos o una restricción DEFAULT que use la función 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.

No se puede quitar la columna ROWGUIDCOL ni se pueden cambiar las restricciones relacionadas si hay definida una columna FILESTREAM para la tabla.The ROWGUIDCOL column cannot be dropped and the related constraints cannot be changed while there is a FILESTREAM column defined for the table. Solamente se puede quitar la columna ROWGUIDCOL después de quitarse la última columna FILESTREAM.The ROWGUIDCOL column can be dropped only after the last FILESTREAM column is dropped.

Si se especifica el atributo de almacenamiento FILESTREAM para una columna, todos los valores para dicha columna se almacenan en un contenedor de datos de FILESTREAM del sistema de archivos.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 la intercalación de la columna.Specifies the collation for the column. El nombre de intercalación puede ser un nombre de intercalación de Windows o un nombre de intercalación de SQL.Collation name can be either a Windows collation name or an SQL collation name. collation_name se aplica solo a columnas de tipos de datos char, varchar, text, nchar, nvarchar y ntext.collation_name is applicable only for columns of the char, varchar, text, nchar, nvarchar, and ntext data types. Si no se especifica, se asignará a la columna la intercalación del tipo de datos definido por el usuario, si la columna es de uno de estos tipos, o la intercalación predeterminada de la base de datos.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 más información sobre los nombres de intercalación de Windows y SQL, vea Nombre de intercalación de Windows y Nombre de intercalación de SQL.For more information about the Windows and SQL collation names, see Windows Collation Name and SQL Collation Name.

Para obtener más información, vea COLLATE.For more information, see COLLATE.

CONSTRAINTCONSTRAINT
Es una palabra clave opcional que indica el principio de la definición de una restricción PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY o 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
Es el nombre de una restricción.Is the name of a constraint. Los nombres de restricción deben ser únicos en el esquema al que pertenece la tabla.Constraint names must be unique within the schema to which the table belongs.

NULL | NOT NULLNULL | NOT NULL
Determina si se permiten valores NULL en la columna.Determine whether null values are allowed in the column. NULL no es estrictamente una restricción, pero se puede especificar, al igual que NOT NULL.NULL is not strictly a constraint but can be specified just like NOT NULL. NOT NULL solo puede especificarse para las columnas si también se especifica PERSISTED.NOT NULL can be specified for computed columns only if PERSISTED is also specified.

PRIMARY KEYPRIMARY KEY
Es una restricción que exige la integridad de entidad para una o varias columnas especificadas a través de un índice único.Is a constraint that enforces entity integrity for a specified column or columns through a unique index. Solo se puede crear una restricción PRIMARY KEY para cada tabla.Only one PRIMARY KEY constraint can be created per table.

UNIQUEUNIQUE
Es una restricción que proporciona la integridad de entidad para una o varias columnas especificadas a través de un índice único.Is a constraint that provides entity integrity for a specified column or columns through a unique index. Las tablas pueden tener varias restricciones UNIQUE.A table can have multiple UNIQUE constraints.

CLUSTERED | NONCLUSTEREDCLUSTERED | NONCLUSTERED
Indica que se ha creado un índice clúster o no clúster para la restricción PRIMARY KEY o UNIQUE.Indicate that a clustered or a nonclustered index is created for the PRIMARY KEY or UNIQUE constraint. De forma predeterminada, el valor de las restricciones PRIMARY KEY es CLUSTERED, y el de las restricciones UNIQUE es NONCLUSTERED.PRIMARY KEY constraints default to CLUSTERED, and UNIQUE constraints default to NONCLUSTERED.

En una instrucción CREATE TABLE, se puede especificar CLUSTERED tan solo para una restricción.In a CREATE TABLE statement, CLUSTERED can be specified for only one constraint. Si se especifica CLUSTERED para una restricción UNIQUE y se especifica también una restricción PRIMARY KEY, el valor predeterminado de PRIMARY KEY es 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
Es una restricción que proporciona integridad referencial para los datos de la columna o columnas.Is a constraint that provides referential integrity for the data in the column or columns. Las restricciones FOREIGN KEY requieren que cada valor de la columna exista en la columna o columnas de referencia correspondientes de la tabla a la que se hace referencia.FOREIGN KEY constraints require that each value in the column exists in the corresponding referenced column or columns in the referenced table. Las restricciones FOREIGN KEY pueden hacer referencia solo a columnas que sean restricciones PRIMARY KEY o UNIQUE en la tabla de referencia o a columnas a las que se haga referencia en UNIQUE INDEX en la tabla de referencia.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. Las claves externas en las columnas calculadas deben marcarse también como PERSISTED.Foreign keys on computed columns must also be marked PERSISTED.

[ schema_name . ] referenced_table_name][ schema_name.] referenced_table_name]
Es el nombre de la tabla a la que hace referencia la restricción FOREIGN KEY y el esquema al que pertenece.Is the name of the table referenced by the FOREIGN KEY constraint, and the schema to which it belongs.

( ref_column [ , ... n ] ) Es una columna o lista de columnas de la tabla a la que hace referencia la restricción FOREIGN KEY.( ref_column [ ,... n ] ) Is a column, or list of columns, from the table referenced by the FOREIGN KEY constraint.

ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
Especifica la acción que tiene lugar en las filas de la tabla creada si dichas filas tienen una relación referencial y la fila a la que se hace referencia se elimina de la tabla primaria.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. El valor predeterminado es NO ACTION.The default is NO ACTION.

NO ACTIONNO ACTION
El Motor de base de datosDatabase Engine genera un error y se revierte la acción de eliminación de la fila de la tabla primaria.The Motor de base de datosDatabase Engine raises an error and the delete action on the row in the parent table is rolled back.

CASCADECASCADE
Si esa fila se elimina de la tabla primaria, las filas correspondientes se eliminan de la tabla de referencia.Corresponding rows are deleted from the referencing table if that row is deleted from the parent table.

SET NULLSET NULL
Todos los valores que forman la clave externa se establecen en NULL si se elimina la fila correspondiente de la tabla primaria.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 esta restricción se ejecute, las columnas de clave externa deben aceptar valores NULL.For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULTSET DEFAULT
Todos los valores que forman la clave externa se establecen en los valores predeterminados si se elimina la fila correspondiente de la tabla primaria.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 esta restricción se ejecute, todas las columnas de clave externa deben tener definiciones predeterminadas.For this constraint to execute, all foreign key columns must have default definitions. Si una columna acepta valores NULL y no se ha establecido un valor predeterminado explícito, NULL se convierte en el valor predeterminado explícito de dicha columna.If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

No especifique CASCADE si la tabla se va a incluir en una publicación de combinación que utiliza registros lógicos.Do not specify CASCADE if the table will be included in a merge publication that uses logical records. Para obtener más información sobre los registros lógicos, vea Agrupar cambios en filas relacionadas con registros lógicos.For more information about logical records, see Group Changes to Related Rows with Logical Records.

ON DELETE CASCADE no se puede definir si ya existe en la tabla un desencadenador INSTEAD OF ON DELETE.ON DELETE CASCADE cannot be defined if an INSTEAD OF trigger ON DELETE already exists on the table.

Por ejemplo, en la base de datos AdventureWorks2012AdventureWorks2012, la tabla ProductVendor tiene una relación referencial con la tabla Vendor.For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table. La clave externa ProductVendor.BusinessEntityID hace referencia a la clave principal Vendor.BusinessEntityID.The ProductVendor.BusinessEntityID foreign key references the Vendor.BusinessEntityID primary key.

Si se ejecuta una instrucción DELETE en una fila de la tabla Vendor y se especifica una acción ON DELETE CASCADE para ProductVendor.BusinessEntityID, Motor de base de datosDatabase Engine comprueba si hay alguna fila dependiente en la tabla 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 Motor de base de datosDatabase Engine checks for one or more dependent rows in the ProductVendor table. Si las hay, las filas dependientes de la tabla ProductVendor se eliminan, así como la fila a la que se hace referencia en la tabla Vendor.If any exist, the dependent rows in the ProductVendor table are deleted, and also the row referenced in the Vendor table.

Por el contrario, si se especifica NO ACTION, Motor de base de datosDatabase Engine genera un error y revierte la acción de eliminación de la fila Vendor si hay al menos una fila en la tabla ProductVendor que hace referencia a ella.Conversely, if NO ACTION is specified, the Motor de base de datosDatabase 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 la acción que se produce en las filas de la tabla modificada cuando esas filas tienen una relación referencial y la fila a la que se hace referencia se actualiza en la tabla primaria.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. El valor predeterminado es NO ACTION.The default is NO ACTION.

NO ACTIONNO ACTION
El Motor de base de datosDatabase Engine genera un error y se revierte la acción de actualización de la fila de la tabla primaria.The Motor de base de datosDatabase Engine raises an error, and the update action on the row in the parent table is rolled back.

CASCADECASCADE
Si esa fila se actualiza en la tabla primaria, las filas correspondientes se actualizan en la tabla de referencia.Corresponding rows are updated in the referencing table when that row is updated in the parent table.

SET NULLSET NULL
Cuando se actualiza la fila correspondiente en la tabla primaria, todos los valores que componen la clave externa se establecen en NULL.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 esta restricción se ejecute, las columnas de clave externa deben aceptar valores NULL.For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULTSET DEFAULT
Cuando se actualiza la fila correspondiente en la tabla primaria, todos los valores que componen la clave externa se establecen en sus valores predeterminados.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 esta restricción se ejecute, todas las columnas de clave externa deben tener definiciones predeterminadas.For this constraint to execute, all foreign key columns must have default definitions. Si una columna acepta valores NULL y no se ha establecido un valor predeterminado explícito, NULL se convierte en el valor predeterminado explícito de dicha columna.If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

No especifique CASCADE si la tabla se va a incluir en una publicación de combinación que utiliza registros lógicos.Do not specify CASCADE if the table will be included in a merge publication that uses logical records. Para obtener más información sobre los registros lógicos, vea Agrupar cambios en filas relacionadas con registros lógicos.For more information about logical records, see Group Changes to Related Rows with Logical Records.

No se puede definir la acción ON UPDATE CASCADE, SET NULL o SET DEFAULT si ya existe un desencadenador INSTEAD OF ON UPDATE en la tabla que se está modificando.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 ejemplo, en la base de datos AdventureWorks2012AdventureWorks2012, la tabla ProductVendor tiene una relación referencial con la tabla Vendor: La clave externa ProductVendor.BusinessEntity hace referencia a la clave principal Vendor.BusinessEntityID.For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table: ProductVendor.BusinessEntity foreign key references the Vendor.BusinessEntityID primary key.

Si se ejecuta una instrucción UPDATE en una fila de la tabla Vendor y se especifica una acción ON UPDATE CASCADE para ProductVendor.BusinessEntityID, Motor de base de datosDatabase Engine comprueba si hay una o más filas dependientes de la tabla 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 Motor de base de datosDatabase Engine checks for one or more dependent rows in the ProductVendor table. Si las hay, las filas dependientes de la tabla ProductVendor se actualizan, así como la fila a la que se hace referencia en la tabla Vendor.If any exist, the dependent rows in the ProductVendor table are updated, and also the row referenced in the Vendor table.

Por el contrario, si se especifica NO ACTION, Motor de base de datosDatabase Engine genera un error y revierte la acción de actualización de la fila Vendor si hay como mínimo una fila en la tabla ProductVendor que hace referencia a ella.Conversely, if NO ACTION is specified, the Motor de base de datosDatabase 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
Es una restricción que exige la integridad del dominio al limitar los valores posibles que se pueden escribir en una o varias columnas.Is a constraint that enforces domain integrity by limiting the possible values that can be entered into a column or columns. Las restricciones CHECK en las columnas calculadas deben marcarse también como PERSISTED.CHECK constraints on computed columns must also be marked PERSISTED.

logical_expression logical_expression
Es una expresión lógica que devuelve TRUE o FALSE.Is a logical expression that returns TRUE or FALSE. Los tipos de datos de alias no pueden formar parte de la expresión.Alias data types cannot be part of the expression.

column column
Es una columna o lista de columnas, entre paréntesis, que se utiliza en las restricciones de tabla para indicar las columnas que se están utilizando en la definición de la restricción.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 cómo se ordenan la columna o las columnas que participan en las restricciones de la tabla.Specifies the order in which the column or columns participating in table constraints are sorted. El valor predeterminado es ASC.The default is ASC.

partition_scheme_name partition_scheme_name
Es el nombre del esquema de partición que define los grupos de archivos a los que se van a asignar las particiones de una tabla con particiones.Is the name of the partition scheme that defines the filegroups onto which the partitions of a partitioned table will be mapped. El esquema de partición debe existir en la base de datos.The partition scheme must exist within the database.

[ partition_column_name .[ partition_column_name. ]]
Especifica la columna en la que se van a crear las particiones de la tabla con particiones.Specifies the column against which a partitioned table will be partitioned. La columna debe coincidir con la especificada en la función de partición que partition_scheme_name está usando en términos de tipo de datos, longitud y precisión.The column must match that specified in the partition function that partition_scheme_name is using in terms of data type, length, and precision. Una columna calculada que participa en una función de partición se debe marcar como PERSISTED de forma explícita.A computed columns that participates in a partition function must be explicitly marked PERSISTED.

Importante

Se recomienda especificar NOT NULL en la columna de partición de las tablas con particiones y también de las tablas sin particiones que sean orígenes o destinos de operaciones 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. De esta forma se garantiza que las restricciones CHECK en columnas de partición no tengan que comprobar si hay valores NULL.Doing this makes sure that any CHECK constraints on partitioning columns do not have to check for null values.

WITH FILLFACTOR = fillfactor WITH FILLFACTOR =fillfactor
Especifica en qué medida el Motor de base de datosDatabase Engine debe llenar cada página de índice que se va a utilizar para almacenar los datos de índice.Specifies how full the Motor de base de datosDatabase Engine should make each index page that is used to store the index data. Los valores de fillfactor especificados por el usuario pueden estar comprendidos entre 1 y 100.User-specified fillfactor values can be from 1 through 100. Si no se especifica un valor, el valor predeterminado es 0.If a value is not specified, the default is 0. Los valores de fill factor 0 y 100 son idénticos.Fill factor values 0 and 100 are the same in all respects.

Importante

La documentación de WITH FILLFACTOR = fillfactor como la única opción de índice que se aplica a las restricciones PRIMARY KEY o UNIQUE se mantiene por compatibilidad con versiones anteriores, pero no se documentará de esta forma en futuras versiones.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
Es el nombre del conjunto de columnas.Is the name of the column set. Un conjunto de columnas es una representación XML sin tipo que combina todas las columnas dispersas de una tabla en una salida estructurada.A column set is an untyped XML representation that combines all of the sparse columns of a table into a structured output. Para obtener más información sobre los conjuntos de columnas, vea Usar conjuntos de columnas.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 )
Se aplica a: SQL ServerSQL Server (de SQL Server 2016 (13.x)SQL Server 2016 (13.x) a SQL Server 2017SQL Server 2017) y a Base de datos SQL de AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Base de datos SQL de AzureAzure SQL Database.

Especifica los nombres de las columnas que el sistema usará para registrar el período durante el que un registro es válido.Specifies the names of the columns that the system will use to record the period for which a record is valid. Use este argumento junto con los argumentos GENERATED ALWAYS AS ROW { START | END } y WITH SYSTEM_VERSIONING = ON para habilitar el control de versiones del sistema en una tabla.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 obtener más información, consulte Temporal Tables.For more information, see Temporal Tables.

COMPRESSION_DELAYCOMPRESSION_DELAY
Se aplica a: SQL ServerSQL Server (de SQL Server 2016 (13.x)SQL Server 2016 (13.x) a SQL Server 2017SQL Server 2017) y a Base de datos SQL de AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Base de datos SQL de AzureAzure SQL Database.

Para una optimización en memoria, el retraso especifica el número mínimo de minutos que debe permanecer una fila en la tabla, sin cambios, antes de que sea válida para la compresión en el índice de almacén de columnas.For a memory-optimized, delay specifies the minimum number of minutes a row must remain in the table, unchanged, before it is eligible for compression into the columnstore index. SQL ServerSQL Server selecciona filas específicas para comprimirlas según la hora de su última actualización.selects specific rows to compress according to their last update time. Por ejemplo, si va a cambiar filas con frecuencia durante un período de dos horas, puede establecer COMPRESSION_DELAY = 120 Minutes para asegurarse de que las actualizaciones se completan antes de que SQL Server comprima la fila.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 las tablas basadas en disco, el retraso especifica el número mínimo de minutos que debe permanecer un grupo de filas delta con estado CLOSED en el grupo de filas delta antes de que SQL ServerSQL Server pueda comprimirlo en el grupo de filas comprimido.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. Puesto que las tablas basadas en disco no realizan el seguimiento de los tiempos de inserción y actualización de filas individuales, SQL ServerSQL Server aplica el retraso a los grupos de filas delta en el 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.

El valor predeterminado es 0 minutos.The default is 0 minutes.

Para obtener recomendaciones sobre cuándo usar COMPRESSION_DELAY, vea Introducción al almacén de columnas para análisis operativos en tiempo realFor recommendations on when to use COMPRESSION_DELAY, please see Get started with Columnstore for real time operational analytics

< table_option> ::=< table_option> ::=
Especifica una o varias opciones de tabla.Specifies one or more table options.

DATA_COMPRESSIONDATA_COMPRESSION
Especifica la opción de compresión de datos para la tabla, el número de partición o el intervalo de particiones especificados.Specifies the data compression option for the specified table, partition number, or range of partitions. Las opciones son las siguientes:The options are as follows:

NingunoNONE
No se comprimen la tabla ni las particiones especificadas.Table or specified partitions are not compressed.

ROWROW
La tabla o las particiones especificadas se comprimen utilizando la compresión de fila.Table or specified partitions are compressed by using row compression.

PAGEPAGE
La tabla o las particiones especificadas se comprimen utilizando la compresión de página.Table or specified partitions are compressed by using page compression.

COLUMNSTORECOLUMNSTORE

Se aplica a: SQL Server 2016 (13.x)SQL Server 2016 (13.x) a SQL Server 2017SQL Server 2017 y Base de datos SQL de AzureAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Base de datos SQL de AzureAzure SQL Database.

Solo se aplica a los índices de almacén de columnas, incluidos los clúster y no clúster.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE especifica que se comprimirá con la compresión de almacén de columnas que ofrezca el mejor rendimiento.COLUMNSTORE specifies to compress with the most performant columnstore compression. Es la elección habitual.This is the typical choice.

COLUMNSTORE_ARCHIVECOLUMNSTORE_ARCHIVE
Se aplica a: SQL ServerSQL Server (de SQL Server 2016 (13.x)SQL Server 2016 (13.x) a SQL Server 2017SQL Server 2017) y a Base de datos SQL de AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Base de datos SQL de AzureAzure SQL Database.

Solo se aplica a los índices de almacén de columnas, incluidos los clúster y no clúster.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE_ARCHIVE comprimirá aún más la partición o la tabla especificada a un tamaño mínimo.COLUMNSTORE_ARCHIVE will further compress the table or partition to a smaller size. Esto se puede usar para el archivado o para otras situaciones que requieran un tamaño de almacenamiento mínimo y pueda permitirse más tiempo para el almacenamiento y recuperación.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 obtener más información, consulte Data Compression.For more information, see Data Compression.

ON PARTITIONS ( { <partition_number_expression> | [ , ...n ] ) ON PARTITIONS ( { <partition_number_expression> | [ ,...n ] )
Especifica las particiones a las que se aplica el valor DATA_COMPRESSION.Specifies the partitions to which the DATA_COMPRESSION setting applies. Si la tabla no se particiona, el argumento ON PARTITIONS generará un error.If the table is not partitioned, the ON PARTITIONS argument will generate an error. Si no se proporciona la cláusula ON PARTITIONS, la opción DATA_COMPRESSION se aplicará a todas las particiones de una tabla con particiones.If the ON PARTITIONS clause is not provided, the DATA_COMPRESSION option will apply to all partitions of a partitioned table.

partition_number_expression se puede especificar de estas maneras:partition_number_expression can be specified in the following ways:

  • Proporcione el número de partición de una partición, por ejemplo: ON PARTITIONS (2)Provide the partition number of a partition, for example: ON PARTITIONS (2)
  • Proporcionando los números de partición para varias particiones individuales separadas por comas, como por ejemplo: ON PARTITIONS (1, 5)Provide the partition numbers for several individual partitions separated by commas, for example: ON PARTITIONS (1, 5)
  • Proporcionando ambos intervalos y particiones individuales, como por ejemplo: ON PARTITIONS (2, 4, 6 TO 8)Provide both ranges and individual partitions, for example: ON PARTITIONS (2, 4, 6 TO 8)

<range> se puede especificar como números de partición separados por la palabra TO, como por ejemplo: 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 establecer diferentes tipos de compresión de datos para distintas particiones, especifique la opción DATA_COMPRESSION más de una vez, por ejemplo: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 una o varias opciones de índice.Specifies one or more index options. Si le interesa una descripción completa de estas opciones, vea CREATE INDEX.For a complete description of these options, see CREATE INDEX.

PAD_INDEX = { ON | OFF }PAD_INDEX = { ON | OFF }
Cuando es ON, el porcentaje de espacio disponible especificado por FILLFACTOR se aplica a las páginas de nivel intermedio del índice.When ON, the percentage of free space specified by FILLFACTOR is applied to the intermediate level pages of the index. Cuando es OFF o no se especifica ningún valor de FILLFACTOR, las páginas de nivel intermedio se rellenan casi al máximo de su capacidad dejando espacio suficiente para al menos una fila del tamaño máximo que el índice puede contener teniendo en cuenta el conjunto de claves de las páginas intermedias.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. El valor predeterminado es OFF.The default is OFF.

FILLFACTOR = fillfactor FILLFACTOR =fillfactor
Especifica un porcentaje que indica cuánto debe llenar el Motor de base de datosDatabase Engine el nivel hoja de cada página de índice durante la creación o modificación de los índices.Specifies a percentage that indicates how full the Motor de base de datosDatabase Engine should make the leaf level of each index page during index creation or alteration. fillfactor debe ser un valor entero comprendido entre 1 y 100.fillfactor must be an integer value from 1 to 100. El valor predeterminado es 0.The default is 0. Los valores de fill factor 0 y 100 son idénticos.Fill factor values 0 and 100 are the same in all respects.

IGNORE_DUP_KEY = { ON | OFF }IGNORE_DUP_KEY = { ON | OFF }
Especifica la respuesta de error cuando una operación de inserción intenta insertar valores de clave duplicados en un índice único.Specifies the error response when an insert operation attempts to insert duplicate key values into a unique index. La opción IGNORE_DUP_KEY se aplica solamente a operaciones de inserción realizadas tras crear o volver a generar el índice.The IGNORE_DUP_KEY option applies only to insert operations after the index is created or rebuilt. La opción no tiene efecto cuando se ejecutan CREATE INDEX, ALTER INDEX o UPDATE.The option has no effect when executing CREATE INDEX, ALTER INDEX, or UPDATE. El valor predeterminado es OFF.The default is OFF.

ONON
Se producirá un mensaje de advertencia cuando se inserten valores de clave duplicados en un índice único.A warning message will occur when duplicate key values are inserted into a unique index. Solo las filas que infrinjan la restricción de unicidad darán error.Only the rows violating the uniqueness constraint will fail.

OFFOFF
Se producirá un mensaje de error cuando se inserten valores de clave duplicados en un índice único.An error message will occur when duplicate key values are inserted into a unique index. Toda la operación INSERT se revertirá.The entire INSERT operation will be rolled back.

IGNORE_DUP_KEY no se puede establecer en ON para los índices creados en una vista, los índices que no sean únicos, los índices XML, los índices espaciales y los í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 ver IGNORE_DUP_KEY, utilice sys.indexes.To view IGNORE_DUP_KEY, use sys.indexes.

En la sintaxis compatible con versiones anteriores, WITH IGNORE_DUP_KEY es 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 }
Si es ON, las estadísticas de índices no actualizadas no se vuelven a calcular automáticamente.When ON, out-of-date index statistics are not automatically recomputed. Si es OFF, se habilita la actualización automática de estadísticas.When OFF, automatic statistics updating are enabled. El valor predeterminado es OFF.The default is OFF.

ALLOW_ROW_LOCKS = { ON | OFF }ALLOW_ROW_LOCKS = { ON | OFF }
Si es ON, los bloqueos de fila se permiten al tener acceso al índice.When ON, row locks are allowed when you access the index. El Motor de base de datosDatabase Engine determina cuándo se usan los bloqueos de fila.The Motor de base de datosDatabase Engine determines when row locks are used. Si es OFF, no se utilizan bloqueos de fila.When OFF, row locks are not used. El valor predeterminado es ON.The default is ON.

ALLOW_PAGE_LOCKS = { ON | OFF }ALLOW_PAGE_LOCKS = { ON | OFF }
Si es ON, los bloqueos de página se permiten al tener acceso al índice.When ON, page locks are allowed when you access the index. Motor de base de datosDatabase Engine determina el momento en que se usan los bloqueos de página.The Motor de base de datosDatabase Engine determines when page locks are used. Si es OFF, no se utilizan bloqueos de página.When OFF, page locks are not used. El valor predeterminado es ON.The default is ON.

OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF } Válido para: SQL Server 2019SQL Server 2019 y versiones posteriores.OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF } Applies to: SQL Server 2019SQL Server 2019 and later.
Especifica si se deben optimizar la contención de inserción de la última página.Specifies whether or not to optimize for last-page insert contention. El valor predeterminado es OFF.The default is OFF. Consulte la sección Claves secuenciales de la página CREATE INDEX para obtener más información.See the Sequential Keys section of the CREATE INDEX page for more information.

FILETABLE_DIRECTORY = directory_nameFILETABLE_DIRECTORY = directory_name

Se aplica a: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) hasta SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

Especifica el nombre de directorio de FileTable compatible con Windows.Specifies the windows-compatible FileTable directory name. Este nombre debe ser único entre todos los nombres de directorio de FileTable en la base de datos.This name should be unique among all the FileTable directory names in the database. La comparación de unicidad no distingue mayúsculas de minúsculas, independientemente de la configuración de intercalación.Uniqueness comparison is case-insensitive, regardless of collation settings. Si no se especifica este valor, se usa el nombre de la tabla de archivos.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 }

Se aplica a: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) hasta SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017). Base de datos SQL de AzureAzure SQL Database no admite FILETABLE.does not support FILETABLE.

Especifica el nombre de la intercalación que se va a aplicar a la columna Name en la FileTable.Specifies the name of the collation to be applied to the Name column in the FileTable. La intercalación no debe distinguir mayúsculas de minúsculas para cumplir con la semántica de nomenclatura de archivos de Windows.The collation must be case-insensitive to comply with Windows file naming semantics. Si no se especifica este valor, se usa la intercalación predeterminada de la base de datos.If this value is not specified, the database default collation is used. Si la intercalación predeterminada de la base de datos distingue mayúsculas de minúsculas, se genera un error en la operación CREATE TABLE.If the database default collation is case-sensitive, an error is raised and the CREATE TABLE operation fails.

collation_name collation_name
El nombre de una intercalación sin distinción entre mayúsculas y minúsculas.The name of a case-insensitive collation.

database_defaultdatabase_default
Especifica que se debe usar la intercalación predeterminada de la base de datos.Specifies that the default collation for the database should be used. Esta intercalación no debe distinguir mayúsculas de minúsculas.This collation must be case-insensitive.

FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name
Se aplica a: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) hasta SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

Especifica el nombre que se debe usar para la restricción de clave primaria creada automáticamente en el objeto FileTable.Specifies the name to be used for the primary key constraint that is automatically created on the FileTable. Si no se especifica este valor, el sistema genera un nombre para la restricción.If this value is not specified, the system generates a name for the constraint.

FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name
Se aplica a: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) hasta SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

Especifica el nombre que se debe usar para la restricción única creada automáticamente en la columna stream_id del objeto FileTable.Specifies the name to be used for the unique constraint that is automatically created on the stream_id column in the FileTable. Si no se especifica este valor, el sistema genera un nombre para la restricción.If this value is not specified, the system generates a name for the constraint.

FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name
Se aplica a: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) hasta SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

Especifica el nombre que se debe usar para la restricción única creada automáticamente en las columnas parent_path_locator y name del objeto FileTable.Specifies the name to be used for the unique constraint that is automatically created on the parent_path_locator and name columns in the FileTable. Si no se especifica este valor, el sistema genera un nombre para la restricción.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 } ] ) ]
Se aplica a: SQL ServerSQL Server (de SQL Server 2016 (13.x)SQL Server 2016 (13.x) a SQL Server 2017SQL Server 2017 y Base de datos SQL de AzureAzure SQL Database).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Base de datos SQL de AzureAzure SQL Database).

Permite el control de versiones del sistema de la tabla si se cumplen los requisitos de tipo de datos, restricción de nulabilidad y restricción de clave principal.Enables system versioning of the table if the datatype, nullability constraint, and primary key constraint requirements are met. Si no se usa el argumento HISTORY_TABLE, el sistema genera una nueva tabla de historial que coincide con el esquema de la tabla actual en el mismo grupo de archivos que la tabla actual, creando un vínculo entre las dos tablas, y permite que el sistema registre el historial de cada registro de la tabla actual en la tabla de historial.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. El nombre de esta tabla de historial será MSSQL_TemporalHistoryFor<primary_table_object_id>.The name of this history table will be MSSQL_TemporalHistoryFor<primary_table_object_id>. De forma predeterminada, es la tabla de historial es PAGE comprimida.By default, the history table is PAGE compressed. Si se usa el argumento HISTORY_TABLE para crear un vínculo a un historial existente y usarlo, dicho vínculo se crea entre la tabla actual y la tabla 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. Si la tabla actual tiene particiones, la tabla de historial se crea en el grupo de archivos predeterminado, ya que la configuración de particiones no se replica automáticamente desde la tabla actual a la de historial.If current table is partitioned, the history table is created on default file group because partitioning configuration is not replicated automatically from the current table to the history table. Si el nombre de una tabla de historial se especifica durante su creación, debe determinar el nombre del esquema y la tabla.If the name of a history table is specified during history table creation, you must specify the schema and table name. Al crear un vínculo a una tabla de historial existente, puede realizar una comprobación de coherencia de datos.When creating a link to an existing history table, you can choose to perform a data consistency check. Esta comprobación de coherencia de datos garantiza que los registros existentes no se superponen.This data consistency check ensures that existing records do not overlap. La comprobación de coherencia de datos se realiza de manera predeterminada.Performing the data consistency check is the default. Utilice este argumento junto con los argumentos PERIOD FOR SYSTEM_TIME y GENERATED ALWAYS AS ROW { START | END } para habilitar el control de versiones del sistema en una tabla.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 obtener más información, consulte 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 ) }
Se aplica a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) hasta SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017).

Crea una nueva tabla con Stretch Database habilitado o deshabilitado.Creates the new table with Stretch Database enabled or disabled. Para obtener más información, vea Stretch Database.For more info, see Stretch Database.

Habilitar Stretch Database para una tablaEnabling Stretch Database for a table

Al habilitar Stretch para una tabla especificando ON, si lo prefiere puede especificar MIGRATION_STATE = OUTBOUND para empezar a migrar los datos inmediatamente o MIGRATION_STATE = PAUSED para posponer la migración de datos.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. El valor predeterminado es MIGRATION_STATE = OUTBOUND.The default value is MIGRATION_STATE = OUTBOUND. Para más información sobre la habilitación de Stretch para una tabla, vea Enable Stretch Database for a table (Habilitar Stretch Database para una tabla).For more info about enabling Stretch for a table, see Enable Stretch Database for a table.

Requisitos previos.Prerequisites. Para poder habilitar Stretch para una tabla, primero tiene que habilitar Stretch en el servidor y en la base de datos.Before you enable Stretch for a table, you have to enable Stretch on the server and on the database. Para obtener más información, vea Enable Stretch Database for a database.For more info, see Enable Stretch Database for a database.

Permisos.Permissions. Para habilitar Stretch para una base de datos o una tabla se necesitan permisos db_owner.Enabling Stretch for a database or a table requires db_owner permissions. Además, para habilitar Stretch para una tabla se necesitan permisos ALTER en la tabla.Enabling Stretch for a table also requires ALTER permissions on the table.

[ FILTER_PREDICATE = { null | predicate } ][ FILTER_PREDICATE = { null | predicate } ]
Se aplica a: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) hasta SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017).

Especifica opcionalmente un predicado de filtro para seleccionar las filas que se migrarán desde una tabla que contiene datos históricos y datos actuales.Optionally specifies a filter predicate to select rows to migrate from a table that contains both historical and current data. El predicado debe llamar a una función determinista con valores de tabla insertada.The predicate must call a deterministic inline table-valued function. Para más información, vea Enable Stretch Database para una tabla (Habilitar Stretch Database para una tabla) y Seleccionar las filas que se van a migrar mediante una función de filtro (Stretch Database).For more info, see Enable Stretch Database for a table and Select rows to migrate by using a filter function.

Importante

Si se indica un predicado de filtro que tiene un rendimiento bajo, la migración de datos también tendrá un rendimiento bajo.If you provide a filter predicate that performs poorly, data migration also performs poorly. Stretch Database aplica el predicado de filtro a la tabla mediante el operador CROSS APPLY.Stretch Database applies the filter predicate to the table by using the CROSS APPLY operator.

Si no se especifica un predicado de filtro, se migrará toda la tabla.If you don't specify a filter predicate, the entire table is migrated.

Cuando se especifica un predicado de filtro, también hay que 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 }
Se aplica a: SQL ServerSQL Server (de SQL Server 2016 (13.x)SQL Server 2016 (13.x) a SQL Server 2017SQL Server 2017) y a Base de datos SQL de AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Base de datos SQL de AzureAzure SQL Database.

  • Especifique OUTBOUND para migrar datos de SQL ServerSQL Server a Base de datos SQL de AzureAzure SQL Database.Specify OUTBOUND to migrate data from SQL ServerSQL Server to Base de datos SQL de AzureAzure SQL Database.

  • Especifique INBOUND para copiar los datos remotos de la tabla de Base de datos SQL de AzureAzure SQL Database a SQL ServerSQL Server y deshabilite Stretch para la tabla.Specify INBOUND to copy the remote data for the table from Base de datos SQL de AzureAzure SQL Database back to SQL ServerSQL Server and to disable Stretch for the table. Para obtener más información, vea Deshabilitar Stretch Database y recuperar datos remotos.For more info, see Disable Stretch Database and bring back remote data.

    Esta operación conlleva gastos de transferencia de datos y no se puede cancelar.This operation incurs data transfer costs, and it can't be canceled.

  • Especifique PAUSED para pausar o posponer la migración de datos.Specify PAUSED to pause or postpone data migration. Para obtener más información, vea Pausa y reanudación de la migración de datos (Stretch Database).For more info, see Pause and resume data migration -Stretch Database.

MEMORY_OPTIMIZEDMEMORY_OPTIMIZED
Se aplica a: SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) a SQL Server 2017SQL Server 2017 y Base de datos SQL de AzureAzure SQL Database).Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Base de datos SQL de AzureAzure SQL Database). La instancia administrada de Base de datos SQL de AzureAzure SQL Database no admite tablas optimizadas para memoria.Base de datos SQL de AzureAzure SQL Database managed instance does not support memory optimized tables.

El valor ON indica si la tabla está optimizada para memoria.The value ON indicates that the table is memory optimized. Las tablas optimizadas para memoria forman parte de la característica OLTP en memoria, que se usa para mejorar el rendimiento del procesamiento de transacciones.Memory-optimized tables are part of the In-Memory OLTP feature, which is used to optimized the performance of transaction processing. Para empezar a trabajar con OLTP en memoria vea Inicio rápido 1: Tecnologías de OLTP en memoria para acelerar el rendimiento de Transact-SQL.To get started with In-Memory OLTP see Quick Start 1: In-Memory OLTP Technologies for Faster Transact-SQL Performance. Para más información sobre las tablas optimizadas para memoria, vea Tablas con optimización para memoria.For more in-depth information about memory-optimized tables see Memory-Optimized Tables.

El valor predeterminado OFF indica que la tabla está basada en disco.The default value OFF indicates that the table is disk-based.

DURABILITYDURABILITY
Se aplica a: SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) a SQL Server 2017SQL Server 2017) y a Base de datos SQL de AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Base de datos SQL de AzureAzure SQL Database.

El valor de SCHEMA_AND_DATA indica que la tabla es duradera, lo que significa que los cambios se conservan en disco y sobreviven al reinicio o la conmutación por error.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 es el valor predeterminado.SCHEMA_AND_DATA is the default value.

El valor de SCHEMA_ONLY indica que la tabla no es perdurable.The value of SCHEMA_ONLY indicates that the table is non-durable. El esquema de la tabla se conserva, pero no se conserva ninguna actualización de datos tras un reinicio o una conmutación por error de la base de datos.The table schema is persisted but any data updates are not persisted upon a restart or failover of the database. DURABILITY = SCHEMA_ONLY solo se permite con MEMORY_OPTIMIZED = ON.DURABILITY = SCHEMA_ONLY is only allowed with MEMORY_OPTIMIZED = ON.

Advertencia

Cuando se crea una tabla con DURABILITY = SCHEMA_ONLY y posteriormente se cambia READ_COMMITTED_SNAPSHOT mediante ALTER DATABASE, se pierden los datos de la tabla.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
Se aplica a: SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) a SQL Server 2017SQL Server 2017 y Base de datos SQL de AzureAzure SQL Database).Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Base de datos SQL de AzureAzure SQL Database.

Indica el número de cubos que se deben crear en el índice hash.Indicates the number of buckets that should be created in the hash index. El valor máximo para BUCKET_COUNT en índices hash es 1 073 741 824.The maximum value for BUCKET_COUNT in hash indexes is 1,073,741,824. Para más información sobre los números de cubos, vea Índices de las tablas con optimización para memoria.For more information about bucket counts, see Indexes for Memory-Optimized Tables.

Bucket_count es un argumento requerido.Bucket_count is a required argument.

INDEX Se aplica a: SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) a SQL Server 2017SQL Server 2017) y Base de datos SQL de AzureAzure SQL Database.INDEX Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Base de datos SQL de AzureAzure SQL Database).

Los índices de columna y de tabla se pueden especificar como parte de la instrucción CREATE TABLE.Column and table indexes can be specified as part of the CREATE TABLE statement. Para más información sobre cómo agregar y quitar índices en tablas optimizadas para memoria, vea: Modificar tablas con optimización para memoriaFor details about adding and removing indexes on memory-optimized tables see: Altering Memory-Optimized Tables

HASHHASH
Se aplica a: SQL ServerSQL Server (de SQL Server 2014 (12.x)SQL Server 2014 (12.x) a SQL Server 2017SQL Server 2017) y a Base de datos SQL de AzureAzure SQL Database.Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Base de datos SQL de AzureAzure SQL Database.

Indica que se ha creado un índice HASH.Indicates that a HASH index is created.

Los índices hash solo se admiten en las tablas optimizadas para memoria.Hash indexes are supported only on memory-optimized tables.

NotasRemarks

Para más información sobre el número de tablas, columnas, restricciones e índices permitidos, vea Especificaciones de capacidad máxima para SQL Server.For information about the number of allowed tables, columns, constraints and indexes, see Maximum Capacity Specifications for SQL Server.

Normalmente, el espacio se asigna a las tablas e índices en incrementos de una extensión cada vez.Space is generally allocated to tables and indexes in increments of one extent at a time. Cuando la opción SET MIXED_PAGE_ALLOCATION de ALTER DATABASE se establece en TRUE, o siempre antes que SQL Server 2016 (13.x)SQL Server 2016 (13.x), cuando se crea una tabla o un índice, se le asignan páginas de extensiones mixtas hasta que tiene suficientes páginas para llenar una extensión 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. Una vez que haya suficientes páginas para llenar una extensión uniforme, se asigna otra extensión cada vez que se llenan las extensiones asignadas actualmente.After it has enough pages to fill a uniform extent, another extent is allocated every time the currently allocated extents become full. Para obtener un informe sobre la cantidad de espacio asignado y usado por una tabla, ejecute sp_spaceused.For a report about the amount of space allocated and used by a table, execute sp_spaceused.

El Motor de base de datosDatabase Engine no exige el orden en que DEFAULT, IDENTITY, ROWGUIDCOL o las restricciones de columna se especifican en una definición de columna.The Motor de base de datosDatabase Engine does not enforce an order in which DEFAULT, IDENTITY, ROWGUIDCOL, or column constraints are specified in a column definition.

Al crear una tabla, la opción QUOTED IDENTIFIER siempre se almacena como ON en los metadatos de la tabla incluso si la opción está establecida en OFF al crear la tabla.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.

Tablas temporalesTemporary Tables

Se pueden crear tablas temporales locales y globales.You can create local and global temporary tables. Las tablas temporales locales son visibles solo en la sesión actual y las tablas temporales globales son visibles para todas las sesiones.Local temporary tables are visible only in the current session, and global temporary tables are visible to all sessions. No se pueden crear particiones en las tablas temporales.Temporary tables cannot be partitioned.

Coloque un prefijo de signo de número único (#table_name) en los nombres de las tablas temporales locales y un prefijo de signo de número doble (##table_name) en los nombres de las tablas temporales globales.Prefix local temporary table names with single number sign (#table_name), and prefix global temporary table names with a double number sign (##table_name).

Las instrucciones Transact-SQLTransact-SQL hacen referencia a la tabla temporal mediante el valor especificado para table_name en la instrucción CREATE TABLE, por ejemplo:Transact-SQLTransact-SQL statements reference the temporary table by using the value specified for table_name in the CREATE TABLE statement, for example:

CREATE TABLE #MyTempTable (
  col1 INT PRIMARY KEY
);

INSERT INTO #MyTempTable 
VALUES (1);

Si se ha creado más de una tabla temporal en un único procedimiento almacenado o lote, deben tener nombres distintos.If more than one temporary table is created inside a single stored procedure or batch, they must have different names.

Si incluye un elemento schema_name al crear una tabla temporal o acceder a ella, se omite.If you include a schema_name when you create or access a temporary table, it is ignored. Todas las tablas temporales se crean en el esquema dbo.All temporary tables are created in the dbo schema.

Si se crea una tabla temporal local en un procedimiento almacenado o una aplicación que varios usuarios pueden ejecutar al mismo tiempo, el Motor de base de datosDatabase Engine tiene que ser capaz de distinguir las tablas creadas por los distintos usuarios.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 Motor de base de datosDatabase Engine must be able to distinguish the tables created by the different users. El Motor de base de datosDatabase Engine realiza esto anexando internamente un sufijo numérico a cada nombre de tabla temporal local.The Motor de base de datosDatabase Engine does this by internally appending a numeric suffix to each local temporary table name. El nombre completo de una tabla temporal tal como se almacena en la tabla sysobjects de tempdb consta del nombre de la tabla especificado en la instrucción CREATE TABLE y el sufijo numérico generado por el 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 que se agregue el sufijo, el parámetro table_name especificado para un nombre temporal local no puede superar los 116 caracteres.To allow for the suffix, table_name specified for a local temporary name cannot exceed 116 characters.

Las tablas temporales se quitan automáticamente cuando están fuera de ámbito, a menos que ya se hayan quitado explícitamente mediante el uso de DROP TABLE:Temporary tables are automatically dropped when they go out of scope, unless explicitly dropped by using DROP TABLE:

  • Una tabla temporal local creada en un procedimiento almacenado se quita automáticamente cuando se completa el procedimiento almacenado.A local temporary table created in a stored procedure is dropped automatically when the stored procedure is finished. Cualquiera de los procedimientos almacenados anidados ejecutados por el procedimiento almacenado que creó la tabla puede hacer referencia a la tabla.The table can be referenced by any nested stored procedures executed by the stored procedure that created the table. El proceso que llamó al procedimiento almacenado que creó la tabla no puede hacer referencia a la tabla.The table cannot be referenced by the process that called the stored procedure that created the table.
  • Las demás tablas temporales se quitan automáticamente al final de la sesión actual.All other local temporary tables are dropped automatically at the end of the current session.
  • Las tablas temporales globales se quitan automáticamente cuando la sesión que creó la tabla finaliza y las tareas restantes han dejado de hacer referencia a ellas.Global temporary tables are automatically dropped when the session that created the table ends and all other tasks have stopped referencing them. La asociación entre una tarea y una tabla se mantiene solo durante la vida de una única instrucción Transact-SQLTransact-SQL.The association between a task and a table is maintained only for the life of a single Transact-SQLTransact-SQL statement. Esto significa que la tabla temporal global se quita al finalizar la última instrucción Transact-SQLTransact-SQL que estuviera haciendo referencia activa a la tabla cuando finalizó la sesión que la creó.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.

Una tabla temporal local creada en un procedimiento almacenado o un desencadenador puede tener el mismo nombre que una tabla temporal creada antes de que se llame al procedimiento almacenado o al desencadenador.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. No obstante, si una consulta hace referencia a una tabla temporal y hay dos tablas temporales con el mismo nombre en ese momento, no está definido en cuál de las dos tablas debe resolverse la 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. Los procedimientos almacenados anidados pueden crear también tablas temporales con el mismo nombre que la tabla temporal creada por el procedimiento almacenado que la llamó.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. Sin embargo, en el caso de las modificaciones que se van a resolver en la tabla creada en el procedimiento anidado, la tabla debe tener la misma estructura, con los mismos nombres de columna, que la tabla creada en el procedimiento que realiza la llamada.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. Esto se muestra en el ejemplo siguiente.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

El conjunto de resultados es el siguiente.Here is the result set.

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

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

Cuando se crean tablas temporales globales o locales, la sintaxis de CREATE TABLE admite la definición de restricciones, excepto restricciones FOREIGN KEY.When you create local or global temporary tables, the CREATE TABLE syntax supports constraint definitions except for FOREIGN KEY constraints. Si se especifica una restricción FOREIGN KEY en una tabla temporal, la instrucción devuelve un mensaje de advertencia que indica que la restricción se ha omitido.If a FOREIGN KEY constraint is specified in a temporary table, the statement returns a warning message that states the constraint was skipped. La tabla se sigue creando sin las restricciones FOREIGN KEY.The table is still created without the FOREIGN KEY constraints. En las restricciones FOREIGN KEY no se puede hacer referencia a tablas temporales.Temporary tables cannot be referenced in FOREIGN KEY constraints.

Si una tabla temporal se crea con una restricción con nombre y la tabla temporal se crea dentro del ámbito de una transacción definida por el usuario, solo un usuario a la vez puede ejecutar la instrucción que crea la tabla temporal.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 ejemplo, si un procedimiento almacenado crea una tabla temporal con una restricción de clave principal con nombre, el procedimiento almacenado no puede ser ejecutado a la vez por varios usuarios.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.

Tablas temporales globales con ámbito de base de datos (Azure SQL Database)Database scoped global temporary tables (Azure SQL Database)

Las tablas temporales globales para SQL ServerSQL Server (cuyo nombre de tabla empieza por ##) se almacenan en tempdb y se comparten entre las sesiones de todos los usuarios en toda la instancia de 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 más información sobre los tipos de tablas SQL, vea la sección anterior sobre la creación de tablas.For information on SQL table types, see the above section on Create Tables.

Base de datos SQL de AzureAzure SQL Database admite tablas temporales globales que se almacenan en tempdb y que tienen como ámbito el nivel de base de datos.supports global temporary tables that are also stored in tempdb and scoped to the database level. Esto significa que las tablas temporales globales se comparten entre las sesiones de todos los usuarios en la misma Base de datos SQL de AzureAzure SQL Database.This means that global temporary tables are shared for all users' sessions within the same Base de datos SQL de AzureAzure SQL Database. Las sesiones de usuario de otras bases de datos no pueden acceder a tablas temporales globales.User sessions from other databases cannot access global temporary tables.

Las tablas temporales globales para Base de datos SQL de AzureAzure SQL Database siguen la misma sintaxis y semántica que usa SQL ServerSQL Server para las tablas temporales.Global temporary tables for Base de datos SQL de AzureAzure SQL Database follow the same syntax and semantics that SQL ServerSQL Server uses for temporary tables. De manera similar, los procedimientos almacenados temporales globales también tienen el ámbito de nivel de base de datos en Base de datos SQL de AzureAzure SQL Database.Similarly, global temporary stored procedures are also scoped to the database level in Base de datos SQL de AzureAzure SQL Database. Las tablas temporales locales (cuyo nombre de tabla empieza por #) también son compatibles con Base de datos SQL de AzureAzure SQL Database y siguen la misma sintaxis y semántica que usa SQL ServerSQL Server.Local temporary tables (initiated with # table name) are also supported for Base de datos SQL de AzureAzure SQL Database and follow the same syntax and semantics that SQL ServerSQL Server uses. Vea la sección anterior sobre tablas temporales.See the above section on Temporary Tables.

Importante

Esta característica está disponible para Base de datos SQL de AzureAzure SQL Database.This feature is available for Base de datos SQL de AzureAzure SQL Database.

Solución de problemas de tablas temporales globales para Azure SQL DatabaseTroubleshooting global temporary tables for Azure SQL Database

Para solucionar problemas de tempdb, consulte Cómo supervisar el uso de tempdb.For the troubleshooting the tempdb, see How to Monitor tempdb use.

Nota

Solo un administrador del servidor puede acceder a las DMV de solución de problemas de Base de datos SQL de AzureAzure SQL Database.Only a server admin can access the troubleshooting DMVs in Base de datos SQL de AzureAzure SQL Database.

PermisosPermissions

Cualquier usuario puede crear objetos temporales globales.Any user can create global temporary objects. Los usuarios solo pueden acceder a sus propios objetos, a menos que reciban permisos adicionales.Users can only access their own objects, unless they receive additional permissions.

Tablas con particionesPartitioned tables

Antes de crear una tabla con particiones mediante CREATE TABLE, debe crear una función de partición para especificar cómo se van a crear las particiones en la tabla.Before creating a partitioned table by using CREATE TABLE, you must first create a partition function to specify how the table becomes partitioned. Para crear una función de partición se usa CREATE PARTITION FUNCTION.A partition function is created by using CREATE PARTITION FUNCTION. A continuación, debe crear un esquema de partición para especificar los grupos de archivos que van a contener las particiones indicadas mediante la función de partición.Second, you must create a partition scheme to specify the filegroups that will hold the partitions indicated by the partition function. Para crear un esquema de partición se usa CREATE PARTITION SCHEME.A partition scheme is created by using CREATE PARTITION SCHEME. La colocación de restricciones PRIMARY KEY o UNIQUE para separar grupos de archivos no se puede especificar para las tablas con particiones.Placement of PRIMARY KEY or UNIQUE constraints to separate filegroups cannot be specified for partitioned tables. Para obtener más información, vea Partitioned Tables and Indexes.For more information, see Partitioned Tables and Indexes.

Restricciones PRIMARY KEYPRIMARY KEY Constraints

  • Una tabla solo puede incluir una restricción PRIMARY KEY.A table can contain only one PRIMARY KEY constraint.

  • El índice generado por una restricción PRIMARY KEY no puede hacer que el número de índices de la tabla supere 999 índices no clúster y 1 índice clúster.The index generated by a PRIMARY KEY constraint cannot cause the number of indexes on the table to exceed 999 nonclustered indexes and 1 clustered index.

  • Si no se especifica CLUSTERED o NONCLUSTERED para una restricción PRIMARY KEY, se utiliza CLUSTERED si no hay índices clúster especificados para las restricciones 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 las columnas definidas en una restricción PRIMARY KEY se deben definir como NOT NULL.All columns defined within a PRIMARY KEY constraint must be defined as NOT NULL. Si no se especifica nulabilidad, la nulabilidad de todas las columnas que participan en una restricción PRIMARY KEY se establece en NOT NULL.If nullability is not specified, all columns participating in a PRIMARY KEY constraint have their nullability set to NOT NULL.

    Nota

    Para las tablas optimizadas para memoria, se permite la columna de clave que acepta valores NULL.For memory-optimized tables, the NULLable key column is allowed.

  • Si la clave principal se define en una columna de tipo definido por el usuario CLR, la implementación del tipo debe admitir el orden binario.If a primary key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. Para obtener más información, vea Tipos definidos por el usuario de CLR.For more information, see CLR User-Defined Types.

Restricciones UNIQUEUNIQUE Constraints

  • Si no se especifica CLUSTERED o NONCLUSTERED para una restricción UNIQUE, de forma predeterminada se utiliza NONCLUSTERED.If CLUSTERED or NONCLUSTERED is not specified for a UNIQUE constraint, NONCLUSTERED is used by default.
  • Cada restricción UNIQUE genera un índice.Each UNIQUE constraint generates an index. El número de restricciones UNIQUE no puede hacer que el número de índices de la tabla supere los 999 índices no clúster y 1 índice clúster.The number of UNIQUE constraints cannot cause the number of indexes on the table to exceed 999 nonclustered indexes and 1 clustered index.
  • Si se define una restricción única en una columna de tipo definido por el usuario CLR, la implementación del tipo debe admitir el orden binario o el orden basado en el 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 obtener más información, vea Tipos definidos por el usuario de CLR.For more information, see CLR User-Defined Types.

Restricciones FOREIGN KEYFOREIGN KEY Constraints

  • Si se especifica un valor distinto de NULL en la columna de una restricción FOREIGN KEY, el valor debe existir en la columna a que se hace referencia; de lo contrario, se devolverá un error de infracción de clave externa.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.

  • Las restricciones FOREIGN KEY se aplican a la columna anterior, a menos que se especifiquen columnas de origen.FOREIGN KEY constraints are applied to the preceding column, unless source columns are specified.

  • Las restricciones FOREIGN KEY solo pueden hacer referencia a las tablas de la misma base de datos en el mismo servidor.FOREIGN KEY constraints can reference only tables within the same database on the same server. La integridad referencial entre bases de datos debe implementarse a través de desencadenadores.Cross-database referential integrity must be implemented through triggers. Para obtener más información, vea CREATE TRIGGER.For more information, see CREATE TRIGGER.

  • Las restricciones FOREIGN KEY pueden hacer referencia a otras columnas de la misma tabla.FOREIGN KEY constraints can reference another column in the same table. Esto recibe el nombre de autorreferencia.This is referred to as a self-reference.

  • La cláusula REFERENCES de una restricción FOREIGN KEY de nivel de columna solo puede incluir una columna de referencia.The REFERENCES clause of a column-level FOREIGN KEY constraint can list only one reference column. Esta columna debe tener el mismo tipo de datos que la columna en la que se define la restricción.This column must have the same data type as the column on which the constraint is defined.

  • La cláusula REFERENCES de una restricción FOREIGN KEY de nivel de tabla debe tener el mismo número de columnas de referencia que la lista de columnas de la restricción.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. El tipo de datos de cada columna de referencia debe ser también el mismo que el de la columna correspondiente de la lista de columnas.The data type of each reference column must also be the same as the corresponding column in the column list.

  • No se puede especificar CASCADE, SET NULL o SET DEFAULT si una columna de tipo timestamp forma parte de la clave externa o de la clave con referencia.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 y NO ACTION se pueden combinar en las tablas con relaciones referenciales entre sí.CASCADE, SET NULL, SET DEFAULT and NO ACTION can be combined on tables that have referential relationships with each other. Si el Motor de base de datosDatabase Engine detecta NO ACTION, detiene y revierte las acciones CASCADE, SET NULL y SET DEFAULT relacionadas.If the Motor de base de datosDatabase Engine encounters NO ACTION, it stops and rolls back related CASCADE, SET NULL and SET DEFAULT actions. Cuando una instrucción DELETE hace que se combinen las acciones CASCADE, SET NULL, SET DEFAULT y NO ACTION, todas las acciones CASCADE, SET NULL y SET DEFAULT se aplican antes de que el Motor de base de datosDatabase Engine compruebe la existencia de NO ACTION.When a DELETE statement causes a combination of CASCADE, SET NULL, SET DEFAULT and NO ACTION actions, all the CASCADE, SET NULL and SET DEFAULT actions are applied before the Motor de base de datosDatabase Engine checks for any NO ACTION.

  • El Motor de base de datosDatabase Engine no tiene un límite predefinido para el número de restricciones FOREIGN KEY que una tabla que hace referencia a otras tablas puede contener, o para el número de restricciones FOREIGN KEY pertenecientes a otras tablas que hacen referencia a una tabla específica.The Motor de base de datosDatabase 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.

    No obstante, el número real de restricciones FOREIGN KEY que se puede utilizar está limitado por la configuración del hardware y por el diseño de la base de datos y de la aplicación.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. Se recomienda que la tabla no contenga más de 253 restricciones FOREIGN KEY y que no más de 253 restricciones FOREIGN KEY hagan referencia a ella.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. El límite real en cada caso puede variar en función de la aplicación y el hardware.The effective limit for you may be more or less depending on the application and hardware. Debe tener en cuenta el costo que supone la exigencia de restricciones FOREIGN KEY al diseñar la base de datos y las aplicaciones.Consider the cost of enforcing FOREIGN KEY constraints when you design your database and applications.

  • Las restricciones FOREIGN KEY no se exigen en tablas temporales.FOREIGN KEY constraints are not enforced on temporary tables.

  • Las restricciones FOREIGN KEY solo pueden hacer referencia a columnas de restricciones PRIMARY KEY o UNIQUE de la tabla a la que se hace referencia o a columnas en UNIQUE INDEX de dicha tabla.FOREIGN KEY constraints can reference only columns in PRIMARY KEY or UNIQUE constraints in the referenced table or in a UNIQUE INDEX on the referenced table.

  • Si la clave externa se define en una columna de tipo definido por el usuario CLR, la implementación del tipo debe admitir el orden binario.If a foreign key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. Para obtener más información, vea Tipos definidos por el usuario de CLR.For more information, see CLR User-Defined Types.

  • Las columnas que participan en una relación de claves externas deben estar definidas con la misma longitud y escala.Columns participating in a foreign key relationship must be defined with the same length and scale.

definiciones DEFAULTDEFAULT definitions

  • Una tabla solo puede incluir una definición DEFAULT.A column can have only one DEFAULT definition.

  • Una definición DEFAULT puede contener valores constantes, funciones, funciones niládicas estándar de SQL o NULL.A DEFAULT definition can contain constant values, functions, SQL standard niladic functions, or NULL. En la siguiente tabla se muestran las funciones niládicas y los valores que devuelven para el valor predeterminado durante la ejecución de una instrucción INSERT.The following table shows the niladic functions and the values they return for the default during an INSERT statement.

    Función niládica SQL-92SQL-92 niladic function Valor devueltoValue returned
    CURRENT_TIMESTAMPCURRENT_TIMESTAMP Fecha y hora actuales.Current date and time.
    CURRENT_USERCURRENT_USER Nombre del usuario que realiza la inserción.Name of user performing an insert.
    SESSION_USERSESSION_USER Nombre del usuario que realiza la inserción.Name of user performing an insert.
    SYSTEM_USERSYSTEM_USER Nombre del usuario que realiza la inserción.Name of user performing an insert.
    UserUSER Nombre del usuario que realiza la inserción.Name of user performing an insert.
  • En una definición DEFAULT, constant_expression no puede hacer referencia a otra columna de la tabla ni a otras tablas, vistas o procedimientos almacenados.constant_expression in a DEFAULT definition cannot refer to another column in the table, or to other tables, views, or stored procedures.

  • Las definiciones DEFAULT no se pueden crear en columnas con un tipo de datos timestamp o en columnas con la propiedad IDENTITY.DEFAULT definitions cannot be created on columns with a timestamp data type or columns with an IDENTITY property.

  • Las definiciones DEFAULT no se pueden crear para columnas con tipos de datos de alias si estos están enlazados a un objeto predeterminado.DEFAULT definitions cannot be created for columns with alias data types if the alias data type is bound to a default object.

Restricciones CHECKCHECK Constraints

  • Una columna puede tener cualquier número de restricciones CHECK y la condición puede incluir varias expresiones lógicas combinadas con AND y OR.A column can have any number of CHECK constraints, and the condition can include multiple logical expressions combined with AND and OR. Varias restricciones CHECK para una columna se validan en el orden en que se crean.Multiple CHECK constraints for a column are validated in the order they are created.

  • La condición de búsqueda debe evaluarse como una expresión booleana y no puede hacer referencia a otra tabla.The search condition must evaluate to a Boolean expression and cannot reference another table.

  • Una restricción CHECK en el nivel de columna solo puede hacer referencia a la columna restringida y una restricción CHECK en el nivel de tabla solo puede hacer referencia a columnas de la misma tabla.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.

    Las restricciones CHECK y las reglas sirven para la misma función de validación de los datos durante las instrucciones INSERT y UPDATE.CHECK CONSTRAINTS and rules serve the same function of validating the data during INSERT and UPDATE statements.

  • Cuando hay una regla y una o más restricciones CHECK para una o varias columnas, se evalúan todas las restricciones.When a rule and one or more CHECK constraints exist for a column or columns, all restrictions are evaluated.

  • No se pueden definir restricciones CHECK en columnas text, ntext o image.CHECK constraints cannot be defined on text, ntext, or image columns.

Información adicional sobre las restriccionesAdditional Constraint information

  • Un índice creado para una restricción no se puede quitar mediante con DROP INDEX; la restricción se debe quitar con ALTER TABLE.An index created for a constraint cannot be dropped by using DROP INDEX; the constraint must be dropped by using ALTER TABLE. Un índice creado y utilizado por una restricción se puede volver a generar con ALTER INDEX ... REBUILD.An index created for and used by a constraint can be rebuilt by using ALTER INDEX ... REBUILD. Para obtener más información, vea Reorganizar y volver a generar índices.For more information, see Reorganize and Rebuild Indexes.
  • Los nombres de restricción deben seguir las reglas de los identificadores, excepto en que el nombre no puede empezar por un signo de número (#).Constraint names must follow the rules for identifiers, except that the name cannot start with a number sign (#). Si constraint_name no se proporciona, se asigna a la restricción un nombre generado por el sistema.If constraint_name is not supplied, a system-generated name is assigned to the constraint. El nombre de la restricción aparece en todos los mensajes de error relativos a infracciones de la restricción.The constraint name appears in any error message about constraint violations.
  • Cuando se infringe una restricción en una instrucción INSERT, UPDATE o DELETE, la instrucción finaliza.When a constraint is violated in an INSERT, UPDATE, or DELETE statement, the statement is ended. Sin embargo, si SET XACT_ABORT se establece en OFF y la instrucción forma parte de una transacción explícita, continúa el procesamiento de la transacción.However, when SET XACT_ABORT is set to OFF, the transaction, if the statement is part of an explicit transaction, continues to be processed. Si SET XACT_ABORT se establece en ON, se revierte toda la transacción.When SET XACT_ABORT is set to ON, the whole transaction is rolled back. La instrucción ROLLBACK TRANSACTION también se puede usar con la definición de transacción al comprobar la función del sistema @@ERROR.You can also use the ROLLBACK TRANSACTION statement with the transaction definition by checking the @@ERROR system function.
  • Si ALLOW_ROW_LOCKS = ON y ALLOW_PAGE_LOCK = ON, se permiten los bloqueos de nivel de fila, página y tabla al obtener acceso al índice.When ALLOW_ROW_LOCKS = ON and ALLOW_PAGE_LOCK = ON, row-, page-, and table-level locks are allowed when you access the index. Motor de base de datosDatabase Engine elige el bloqueo apropiado y puede cambiar de escala el bloqueo: de un bloqueo de fila o página a un bloqueo de tabla.The Motor de base de datosDatabase Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock. Si ALLOW_ROW_LOCKS = OFF y ALLOW_PAGE_LOCK = OFF, solo se permite un bloqueo de nivel de tabla al obtener acceso al índice.When ALLOW_ROW_LOCKS = OFF and ALLOW_PAGE_LOCK = OFF, only a table-level lock is allowed when you access the index.
  • Si una tabla tiene restricciones FOREIGN KEY o CHECK, y desencadenadores, las condiciones de restricción se evalúan antes de que se ejecute el desencadenador.If a table has FOREIGN KEY or CHECK CONSTRAINTS and triggers, the constraint conditions are evaluated before the trigger is executed.

Para ver un informe sobre una tabla y sus columnas, use sp_help o sp_helpconstraint.For a report on a table and its columns, use sp_help or sp_helpconstraint. Para cambiar el nombre de una tabla, use sp_rename.To rename a table, use sp_rename. Para obtener un informe de las vistas y los procedimientos almacenados que dependen de una tabla, use sys.dm_sql_referenced_entities y 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.

Reglas de nulabilidad en una definición de tablaNullability rules within a table definition

La nulabilidad de una columna determina si esa columna puede permitir un valor nulo (NULL) para sus datos.The nullability of a column determines whether that column can allow a null value (NULL) as the data in that column. NULL no es lo mismo que cero o en blanco: NULL significa que no se ha especificado ninguna entrada o que se ha proporcionado un valor NULL explícito y suele implicar que se desconoce el valor o que no es aplicable.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.

Cuando se utiliza CREATE TABLE o ALTER TABLE para crear o alterar una tabla, la configuración de la base de datos y de la sesión afecta a la nulabilidad del tipo de datos que se utiliza en una definición de columna, e incluso puede anularla.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. Se recomienda que defina siempre explícitamente una columna como NULL o NOT NULL en el caso de columnas no calculadas o, si utiliza un tipo de datos definido por el usuario, que permita que la columna utilice la nulabilidad predeterminada del tipo de datos.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. Las columnas dispersas siempre deben permitir valores NULL.Sparse columns must always allow NULL.

Si la nulabilidad de la columna no se especifica explícitamente, seguirá las reglas que se muestran en la tabla siguiente.When column nullability is not explicitly specified, column nullability follows the rules shown in the following table.

Tipo de datos de columnaColumn data type ReglaRule
Tipo de datos de aliasAlias data type Motor de base de datosDatabase Engine utiliza la nulabilidad especificada al crear el tipo de datos.The Motor de base de datosDatabase Engine uses the nullability that is specified when the data type was created. Para determinar la nulabilidad predeterminada del tipo de datos, use sp_help.To determine the default nullability of the data type, use sp_help.
tipo definido por el usuario CLRCLR user-defined type La nulabilidad se determina de acuerdo con la definición de columna.Nullability is determined according to the column definition.
Tipo de datos suministrado por el sistemaSystem-supplied data type Si el tipo de datos suministrado por el sistema solo tiene una opción, esta tiene prioridad.If the system-supplied data type has only one option, it takes precedence. Los tipos de datos timestamp deben ser NOT NULL.timestamp data types must be NOT NULL. Si la configuración de sesión se establece en ON con SET:When any session settings are set ON by using SET:
Si ANSI_NULL_DFLT_ON = ON, se asigna NULL.ANSI_NULL_DFLT_ON = ON, NULL is assigned.
Si ANSI_NULL_DFLT_OFF = ON, se asigna NOT NULL.ANSI_NULL_DFLT_OFF = ON, NOT NULL is assigned.

Si la base de datos se configura con ALTER DATABASE:When any database settings are configured by using ALTER DATABASE:
Si ANSI_NULL_DEFAULT_ON = ON, se asigna NULL.ANSI_NULL_DEFAULT_ON = ON, NULL is assigned.
Si ANSI_NULL_DEFAULT_OFF = ON, se asigna NOT NULL.ANSI_NULL_DEFAULT_OFF = ON, NOT NULL is assigned.

Para ver la configuración de la base de datos para ANSI_NULL_DEFAULT, use la vista de catálogo sys.databases.To view the database setting for ANSI_NULL_DEFAULT, use the sys.databases catalog view

Cuando ninguna de las opciones ANSI_NULL_DFLT está establecida para la sesión y la base de datos tiene la configuración predeterminada (ANSI_NULL_DEFAULT es OFF), se asigna el valor predeterminado NOT NULL.When neither of the ANSI_NULL_DFLT options is set for the session and the database is set to the default (ANSI_NULL_DEFAULT is OFF), the default of NOT NULL is assigned.

En el caso de una columna calculada, el Motor de base de datosDatabase Engine determinará automáticamente su nulabilidad.If the column is a computed column, its nullability is always automatically determined by the Motor de base de datosDatabase Engine. Para determinar la nulabilidad de este tipo de columna, use la función COLUMNPROPERTY con la propiedad AllowsNull.To find out the nullability of this type of column, use the COLUMNPROPERTY function with the AllowsNull property.

Nota

El controlador ODBC de SQL Server y el controlador OLE DB de SQL Server tienen un valor predeterminado de ANSI_NULL_DFLT_ON establecido en ON.The SQL Server ODBC driver and SQL Server OLE DB driver both default to having ANSI_NULL_DFLT_ON set to ON. Los usuarios de ODBC y OLE DB pueden configurar esto en los orígenes de datos ODBC o con las propiedades o atributos de la conexión establecidos por la aplicación.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

En las tablas del sistema no se puede habilitar la compresión.System tables cannot be enabled for compression. Cuando se crea una tabla, la compresión de datos se establece en NONE, a menos que se especifique otra cosa.When you are creating a table, data compression is set to NONE, unless specified otherwise. Si se especifica una lista de particiones o una partición que están fuera del intervalo, se generará un error.If you specify a list of partitions or a partition that is out of range, an error will be generated. Para obtener más información sobre la compresión de datos, vea Compresión de datos.For a more information about data compression, see Data Compression.

Para evaluar cómo afecta el cambio del estado de compresión a una tabla, índice o partición, use el procedimiento almacenado 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.

PermisosPermissions

Se requiere el permiso CREATE TABLE en la base de datos y el permiso ALTER en el esquema en el que se va a crear la tabla.Requires CREATE TABLE permission in the database and ALTER permission on the schema in which the table is being created.

Si las columnas de la instrucción CREATE TABLE se definen como un tipo definido por el usuario, se necesita el permiso REFERENCES en el tipo definido por el usuario.If any columns in the CREATE TABLE statement are defined to be of a user-defined type, REFERENCES permission on the user-defined type is required.

Si las columnas de la instrucción CREATE TABLE se definen como un tipo definido por el usuario CLR, se necesita la propiedad del tipo o el permiso REFERENCES.If any columns in the CREATE TABLE statement are defined to be of a CLR user-defined type, either ownership of the type or REFERENCES permission on it is required.

Si las columnas de la instrucción CREATE TABLE tienen asociada una colección de esquemas XML, se necesita la propiedad de la colección de esquemas XML o el permiso REFERENCES.If any columns in the CREATE TABLE statement have an XML schema collection associated with them, either ownership of the XML schema collection or REFERENCES permission on it is required.

Cualquier usuario puede crear tablas temporales en tempdb.Any user can create temporary tables in tempdb.

EjemplosExamples

A.A. Crear una restricción PRIMARY KEY en una columnaCreate a PRIMARY KEY constraint on a column

En el ejemplo siguiente se muestra la definición de columna para una restricción PRIMARY KEY con un índice clúster en la columna EmployeeID de la tabla 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 no se especifica un nombre de restricción, el sistema proporciona el nombre de la restricción.Because a constraint name is not specified, the system supplies the constraint name.

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

B.B. Usar restricciones FOREIGN KEYUsing FOREIGN KEY constraints

Una restricción FOREIGN KEY se utiliza para hacer referencia a otra tabla.A FOREIGN KEY constraint is used to reference another table. Las claves externas pueden ser claves de una sola columna o de varias columnas.Foreign keys can be single-column keys or multicolumn keys. En el siguiente ejemplo se muestra una restricción FOREIGN KEY de una única columna en la tabla SalesOrderHeader que hace referencia a la tabla SalesPerson.This following example shows a single-column FOREIGN KEY constraint on the SalesOrderHeader table that references the SalesPerson table. Solo se requiere la cláusula REFERENCES para una restricción FOREIGN KEY de una única columna.Only the REFERENCES clause is required for a single-column FOREIGN KEY constraint.

SalesPersonID int NULL
REFERENCES SalesPerson(SalesPersonID)

También puede utilizar la cláusula FOREIGN KEY de forma explícita y volver a formular el atributo de columna.You can also explicitly use the FOREIGN KEY clause and restate the column attribute. Observe que no es necesario que el nombre de la columna sea el mismo en ambas tablas.Note that the column name does not have to be the same in both tables.

FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(SalesPersonID)

Las restricciones de claves de varias columnas se crean como restricciones de tabla.Multicolumn key constraints are created as table constraints. En la base de datos AdventureWorks2012AdventureWorks2012, la tabla SpecialOfferProduct incluye una restricción PRIMARY KEY de varias columnas.In the AdventureWorks2012AdventureWorks2012 database, the SpecialOfferProduct table includes a multicolumn PRIMARY KEY. En el siguiente ejemplo se muestra cómo hacer referencia a esta clave desde otra tabla; el nombre explícito de restricción es 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. Usar restricciones UNIQUEUsing UNIQUE constraints

Las restricciones UNIQUE se utilizan para exigir la unicidad en las columnas de clave no principal.UNIQUE constraints are used to enforce uniqueness on nonprimary key columns. En el siguiente ejemplo se exige la restricción de que la columna Name de la tabla Product debe ser única.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. Usar definiciones DEFAULTUsing DEFAULT definitions

Los valores predeterminados suministran un valor (con las instrucciones INSERT y UPDATE) cuando no se especifica ninguno.Defaults supply a value (with the INSERT and UPDATE statements) when no value is supplied. Por ejemplo, la base de datos AdventureWorks2012AdventureWorks2012 puede incluir una tabla de búsqueda con los distintos trabajos que los empleados pueden realizar en la compañía.For example, the AdventureWorks2012AdventureWorks2012 database could include a lookup table listing the different jobs employees can fill in the company. En la columna que describe cada trabajo, el valor predeterminado de cadena de caracteres puede suministrar una descripción si no se ha escrito una descripción de forma explícita.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'

Además de constantes, las definiciones de DEFAULT pueden incluir funciones.In addition to constants, DEFAULT definitions can include functions. Utilice el siguiente ejemplo para obtener la fecha actual de una entrada.Use the following example to get the current date for an entry.

DEFAULT (getdate())

Un recorrido de las funciones niládicas puede mejorar también la integridad de los datos.A niladic-function scan can also improve data integrity. Para realizar un seguimiento del usuario que ha insertado una fila, utilice la función niládica para USER.To keep track of the user that inserted a row, use the niladic-function for USER. No escriba las funciones niládicas entre paréntesis.Do not enclose the niladic-functions with parentheses.

DEFAULT USER

E.E. Usar restricciones CHECKUsing CHECK constraints

En el siguiente ejemplo se muestra una restricción para los valores escritos en la columna CreditRating de la tabla Vendor.The following example shows a restriction made to values that are entered into the CreditRating column of the Vendor table. La restricción no tiene nombre.The constraint is unnamed.

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

En este ejemplo se muestra una restricción con nombre con una restricción de patrón en los datos de caracteres escritos en la columna de la tabla.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]')

En este ejemplo se especifica que los valores se deben incluir en una lista específica o seguir un patrón dado.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. Mostrar la definición de tabla completaShowing the complete table definition

En el siguiente ejemplo se muestran las definiciones de tablas completas con todas las definiciones de restricciones para la tabla PurchaseOrderDetail creada en la base de datos AdventureWorks2012AdventureWorks2012.The following example shows the complete table definitions with all constraint definitions for table PurchaseOrderDetail created in the AdventureWorks2012AdventureWorks2012 database. Tenga en cuenta que, para ejecutar el ejemplo, el esquema de tabla se cambia a 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. Crear una tabla con una columna xml con tipo en una colección de esquemas XMLCreating a table with an xml column typed to an XML schema collection

En el siguiente ejemplo se crea una tabla con una columna xml con tipo de la colección de esquemas XML HRResumeSchemaCollection.The following example creates a table with an xml column that is typed to XML schema collection HRResumeSchemaCollection. La palabra clave DOCUMENT especifica que cada instancia del tipo de datos xml en column_name solo puede contener un elemento de nivel 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. Crear una tabla con particionesCreating a partitioned table

En el ejemplo siguiente se crea una función de partición para crear cuatro particiones en una tabla o en un índice.The following example creates a partition function to partition a table or index into four partitions. A continuación, se crea un esquema de partición en el que se especifican los grupos de archivos que van a contener cada una de las cuatro particiones.Then, the example creates a partition scheme that specifies the filegroups in which to hold each of the four partitions. Finalmente, en el ejemplo se crea una tabla que utiliza el esquema de partición.Finally, the example creates a table that uses the partition scheme. En este ejemplo se asume que los grupos de archivos ya existen en la base de datos.This example assumes the filegroups already exist in the database.

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

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

En función de los valores de la columna col1 de PartitionTable, las particiones se asignan de las maneras siguientes.Based on the values of column col1 of PartitionTable, the partitions are assigned in the following ways.

Grupo de archivosFilegroup test1fgtest1fg test2fgtest2fg test3fgtest3fg test4fgtest4fg
ParticiónPartition 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. Usar el tipo de datos uniqueidentifier en una columnaUsing the uniqueidentifier data type in a column

En el siguiente ejemplo se crea una tabla con una columna uniqueidentifier.The following example creates a table with a uniqueidentifier column. En el ejemplo se utiliza una restricción PRIMARY KEY para impedir que los usuarios inserten valores duplicados, y se utiliza la función NEWSEQUENTIALID() de la restricción DEFAULT para proporcionar valores a las nuevas filas.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. Se aplica la propiedad ROWGUIDCOL a la columna uniqueidentifier de modo que se pueda hacer referencia a la misma mediante la palabra clave $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. Usar una expresión para una columna calculadaUsing an expression for a computed column

En el siguiente ejemplo se muestra el uso de una expresión ((low + high)/2) para calcular la columna calculada 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. Crear una columna calculada en función de una columna de tipo definido por el usuarioCreating a computed column based on a user-defined type column

En el siguiente ejemplo se crea una tabla con una columna de tipo definido por el usuario utf8string dando por supuesto que el ensamblado del tipo y el propio tipo ya se han creado en la base de datos actual.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. Se define una segunda columna en función de utf8string y se usa el método ToString() de type(class) utf8string para calcular el valor de la columna.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. Usar la función USER_NAME para una columna calculadaUsing the USER_NAME function for a computed column

En el siguiente ejemplo se utiliza la función USER_NAME() en la columna 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. Crear una tabla que tenga una columna FILESTREAMCreating a table that has a FILESTREAM column

En el ejemplo siguiente se crea una tabla que tiene una columna FILESTREAM Photo.The following example creates a table that has a FILESTREAM column Photo. Si una tabla tiene una o varias columnas FILESTREAM, la tabla debe tener una columna 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. Crear una tabla que use compresión de filaCreating a table that uses row compression

En el ejemplo siguiente se crea una tabla que usa la compresión de fila.The following example creates a table that uses row compression.

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

Para obtener más ejemplos de compresión de datos, vea Compresión de datos.For additional data compression examples, see Data Compression.

O.O. Crear una tabla que tenga columnas dispersas y un conjunto de columnasCreating a table that has sparse columns and a column set

En los ejemplos siguientes se muestra cómo crear una tabla que tenga una columna dispersa y una tabla que tenga dos columnas dispersas y un conjunto de columnas.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. En los ejemplos se utiliza la sintaxis básica.The examples use the basic syntax. Para ejemplos más complejos, vea Usar columnas dispersas y Usar conjuntos de columnas.For more complex examples, see Use Sparse Columns and Use Column Sets.

En este ejemplo se crea una tabla que tiene una columna dispersa.This example creates a table that has a sparse column.

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

En este ejemplo se crea una tabla que tiene dos columnas dispersas y un conjunto de columnas denominado 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. Crear una tabla temporal basada en disco con control de versiones del sistemaCreating a system-versioned disk-based temporal table

Se aplica a: SQL Server 2016 (13.x)SQL Server 2016 (13.x) hasta SQL Server 2017SQL Server 2017 y Base de datos SQL de AzureAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Base de datos SQL de AzureAzure SQL Database.

En estos ejemplos se muestra cómo crear una tabla temporal vinculada a una nueva tabla de historial y cómo crear una tabla temporal vinculada a una tabla de historial 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. Tenga en cuenta que la tabla temporal debe tener definida una clave principal para habilitarla para la tabla para el control de versiones del 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 obtener ejemplos que muestren cómo agregar o quitar versiones del sistema en una tabla existente, vea Control de versiones del sistema en Ejemplos.For examples showing how to add or remove system versioning on an existing table, see System Versioning in Examples. Para casos de uso, vea Tablas temporales.For use cases, see Temporal Tables.

En este ejemplo se crea una nueva tabla temporal vinculada a una nueva tabla de historial.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);

En este ejemplo se crea una nueva tabla temporal vinculada a una tabla de historial 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. Crear una tabla temporal optimizada para memoria con control de versiones del sistemaCreating a system-versioned memory-optimized temporal table

Se aplica a: SQL Server 2016 (13.x)SQL Server 2016 (13.x) hasta SQL Server 2017SQL Server 2017 y Base de datos SQL de AzureAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Base de datos SQL de AzureAzure SQL Database.

En este ejemplo se muestra cómo crear una tabla temporal optimizada para memoria con control de versiones del sistema que esté vinculada a una nueva tabla de historial basada en disco.The following example shows how to create a system-versioned memory-optimized temporal table linked to a new disk-based history table.

En este ejemplo se crea una nueva tabla temporal vinculada a una nueva tabla de historial.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 )
    );

En este ejemplo se crea una nueva tabla temporal vinculada a una tabla de historial 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. Crear una tabla con columnas cifradasCreating a table with encrypted columns

En este ejemplo se crea una tabla con dos columnas cifradas.The following example creates a table with two encrypted columns. Para obtener más información, vea 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. Crear un índice filtrado en líneaCreate an inline filtered index

Crea una tabla con un índice filtrado en línea.Creates a table with an inline filtered index.

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

T.T. Creación de un índice en líneaCreate an inline index

A continuación se muestra cómo utilizar NONCLUSTERED en línea para las tablas basadas en 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. Creación de una tabla temporal con una clave principal compuesta anónimaCreate a temporary table with an anonymously named compound primary key

Crea una tabla con una clave principal compuesta anónima.Creates a table with an anonymously named compound primary key. Esto resulta útil para evitar conflictos de tiempo de ejecución en los que dos tablas temporales con ámbito de sesión, cada una en una sesión independiente, usan el mismo nombre para una restricción.This is useful to avoid run-time conflicts where two session-scoped temp tables, each in a separate session, use the same name for a constraint.

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

Si asigna un nombre explícitamente a la restricción, la segunda sesión generará un error como el siguiente: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.

En problema surge del hecho de que, si bien el nombre de la tabla temporal se unifica, los nombres de las restricciones no.The problem arises from the fact that while the temp table name is uniquified, the constraint names are not.

V.V. Uso de tablas temporales globales en Azure SQL DatabaseUsing global temporary tables in Azure SQL Database

La sesión A crea una tabla temporal global ##test en testdb1 de Base de datos SQL de AzureAzure SQL Database y agrega 1 filaSession A creates a global temp table ##test in Base de datos SQL de 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';

El conjunto de resultados es el siguiente.Here is the result set.

1253579504

Obtención del nombre de la tabla temporal global para un identificador de objeto determinado 1253579504 en 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

El conjunto de resultados es el siguiente.Here is the result set.

##test

La sesión B se conecta a testdb1 de Base de datos SQL de AzureAzure SQL Database y puede acceder a la tabla ##test creada por la sesión ASession B connects to Base de datos SQL de AzureAzure SQL Database testdb1 and can access table ##test created by session A

SELECT * FROM ##test

El conjunto de resultados es el siguiente.Here is the result set.

1,1

La sesión C se conecta a otra base de datos testdb2 de Base de datos SQL de AzureAzure SQL Database y quiere acceder a ##test creada en testdb1.Session C connects to another database in Base de datos SQL de AzureAzure SQL Database testdb2 and wants to access ##test created in testdb1. Esta selección genera un error debido al ámbito de la base de datos de las tablas temporales globales.This select fails due to the database scope for the global temp tables

SELECT * FROM ##test

Esto genera el error siguiente:Which generates the following error:

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

Direccionar el objeto de sistema en tempdb de Base de datos SQL de AzureAzure SQL Database desde testdb1 de la base de datos del usuario actualAddressing system object in Base de datos SQL de 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 tambiénSee Also

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