CREATE TYPE (Transact-SQL)CREATE TYPE (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 un tipo de datos de alias o un tipo definido por el usuario en la base de datos actual de SQL ServerSQL Server o Base de datos SQL de AzureAzure SQL Database.Creates an alias data type or a user-defined type in the current database in SQL ServerSQL Server or Base de datos SQL de AzureAzure SQL Database. La implementación de un tipo de datos de alias se basa en un tipo nativo del sistema de SQL ServerSQL Server.The implementation of an alias data type is based on a SQL ServerSQL Server native system type. Un tipo definido por el usuario se implementa a través de una clase de un ensamblado de Common Language Runtime (CLR) de MicrosoftMicrosoft .NET Framework.NET Framework.A user-defined type is implemented through a class of an assembly in the MicrosoftMicrosoft.NET Framework.NET Framework common language runtime (CLR). Para enlazar un tipo definido por el usuario a su implementación, el ensamblado CLR que contiene la implementación del tipo debe registrarse primero en SQL ServerSQL Server por medio de CREATE ASSEMBLY.To bind a user-defined type to its implementation, the CLR assembly that contains the implementation of the type must first be registered in SQL ServerSQL Server by using CREATE ASSEMBLY.

De manera predeterminada, la posibilidad de ejecutar código de CLR está desactivada en SQL ServerSQL Server.The ability to run CLR code is off by default in SQL ServerSQL Server. Se pueden crear, modificar y quitar objetos de base de datos que hagan referencia a módulos de código administrado, pero estas referencias no se ejecutarán en SQL ServerSQL Server a menos que se habilite la opción clr enabled por medio de sp_configure.You can create, modify and drop database objects that reference managed code modules, but these references will not execute in SQL ServerSQL Server unless the clr enabled Option is enabled by using sp_configure.

Nota

En este tema se describe la integración de CLR de .NET Framework en SQL Server.The integration of .NET Framework CLR into SQL Server is discussed in this topic. La integración de CLR no se aplica a Azure SQL DatabaseSQL Database.CLR integration does not apply to Azure SQL DatabaseSQL Database.

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

SintaxisSyntax

-- User-defined Data Type Syntax    
CREATE TYPE [ schema_name. ] type_name  
{   
    [
      FROM base_type   
      [ ( precision [ , scale ] ) ]  
      [ NULL | NOT NULL ]
    ]
    | EXTERNAL NAME assembly_name [ .class_name ]   
    | AS TABLE ( { <column_definition> | <computed_column_definition> [ ,... n ] }
      [ <table_constraint> ] [ ,... n ]    
      [ <table_index> ] [ ,... n ] } )
 
} [ ; ]  
  
<column_definition> ::=  
column_name <data_type>  
    [ COLLATE collation_name ]   
    [ NULL | NOT NULL ]  
    [   
        DEFAULT constant_expression ]   
      | [ IDENTITY [ ( seed ,increment ) ]   
    ]  
    [ ROWGUIDCOL ] [ <column_constraint> [ ...n ] ]   
  
<data type> ::=   
[ type_schema_name . ] type_name   
    [ ( precision [ , scale ] | max |   
                [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]   
  
<column_constraint> ::=   
{     { PRIMARY KEY | UNIQUE }   
        [ CLUSTERED | NONCLUSTERED ]   
        [   
            WITH ( <index_option> [ ,...n ] )   
        ]  
  | CHECK ( logical_expression )   
}   
  
<computed_column_definition> ::=  
  
column_name AS computed_column_expression   
[ PERSISTED [ NOT NULL ] ]  
[   
    { PRIMARY KEY | UNIQUE }  
        [ CLUSTERED | NONCLUSTERED ]  
        [   
            WITH ( <index_option> [ ,...n ] )  
        ]  
    | CHECK ( logical_expression )   
]   
  
<table_constraint> ::=  
{   
    { PRIMARY KEY | UNIQUE }   
        [ CLUSTERED | NONCLUSTERED ]   
    ( column [ ASC | DESC ] [ ,...n ] )   
        [   
    WITH ( <index_option> [ ,...n ] )   
        ]  
    | CHECK ( logical_expression )   
}   
  
<index_option> ::=  
{  
    IGNORE_DUP_KEY = { ON | OFF }  
}  

< table_index > ::=  
  INDEX constraint_name  
     [ CLUSTERED | NONCLUSTERED ]   (column [ ASC | DESC ] [ ,... n ] )} }  
-- User-defined Memory Optimized Table Types Syntax  
CREATE TYPE [schema_name. ] type_name  
AS TABLE ( { <column_definition> [ ,... n ] }  
    | [ <table_constraint> ] [ ,... n ]    
    | [ <table_index> ] [ ,... n ] } )
    [ WITH ( <table_option> [ ,... n ] ) ]  
 [ ; ]  
  
<column_definition> ::=  
column_name <data_type>  
    [ COLLATE collation_name ]   [ NULL | NOT NULL ]    [  
      [ IDENTITY [ (1 , 1) ]  
    ]  
    [ <column_constraint> [ ... n ] ]    [ <column_index> ]  
  
<data type> ::=  
 [type_schema_name . ] type_name [ (precision [ , scale ]) ]  
  
<column_constraint> ::=  
{ PRIMARY KEY {   NONCLUSTERED HASH WITH (BUCKET_COUNT = bucket_count) 
                | NONCLUSTERED } }  
  
< table_constraint > ::=  
{ PRIMARY KEY { NONCLUSTERED HASH (column [ ,... n ] ) 
                   WITH (BUCKET_COUNT = bucket_count) 
               | NONCLUSTERED  (column [ ASC | DESC ] [ ,... n ] )  } }  
  
<column_index> ::=  
  INDEX index_name  
{ { [ NONCLUSTERED ] HASH WITH (BUCKET_COUNT = bucket_count) 
     | NONCLUSTERED } }  
  
< table_index > ::=  
  INDEX constraint_name  
{ { [ NONCLUSTERED ] HASH (column [ ,... n ] ) WITH (BUCKET_COUNT = bucket_count) 
 |  [NONCLUSTERED]  (column [ ASC | DESC ] [ ,... n ] )} }  
  
<table_option> ::=  
{  
    [MEMORY_OPTIMIZED = {ON | OFF}]  
}  

ArgumentosArguments

schema_nameschema_name
Es el nombre del esquema al que pertenece el tipo de datos de alias o el tipo definido por el usuario.Is the name of the schema to which the alias data type or user-defined type belongs.

type_nametype_name
Es el nombre del tipo de datos de alias o del tipo definido por el usuario.Is the name of the alias data type or user-defined type. Los nombres de tipos deben cumplir las reglas de los identificadores.Type names must comply with the rules for identifiers.

base_typebase_type
Es el tipo de datos suministrado por SQL ServerSQL Server en el que se basa el tipo de datos de alias.Is the SQL ServerSQL Server supplied data type on which the alias data type is based. base_type es de tipo sysname, no tiene ningún valor predeterminado y puede tener uno de los valores siguientes:base_type is sysname, with no default, and can be one of the following values:

bigintbigint binary( n )binary( n ) bitbit char( n )char( n )
datedate datetimedatetime datetime2datetime2 datetimeoffsetdatetimeoffset
decimaldecimal floatfloat imagenimage intint
moneymoney nchar( n )nchar( n ) ntextntext numericnumeric
nvarchar( n | max)nvarchar( n | max) realreal smalldatetimesmalldatetime smallintsmallint
smallmoneysmallmoney sql_variantsql_variant textotext timetime
tinyinttinyint uniqueidentifieruniqueidentifier varbinary( n | max)varbinary( n | max) varchar( n | max)varchar( n | max)

base_type también puede ser cualquier sinónimo de tipo de datos que esté asignado a uno de estos tipos de datos del sistema.base_type can also be any data type synonym that maps to one of these system data types.

precisiónprecision
Para decimal o numeric, es un entero no negativo que indica el número máximo de dígitos decimales que se pueden almacenar en total, tanto a la derecha como a la izquierda del separador decimal.For decimal or numeric, is a non-negative integer that indicates the maximum total number of decimal digits that can be stored, both to the left and to the right of the decimal point. Para más información, vea decimal y numeric (Transact-SQL).For more information, see decimal and numeric (Transact-SQL).

escalascale
Para decimal o numeric, es un entero no negativo que indica el número máximo de dígitos decimales que se pueden almacenar a la derecha del separador decimal, y debe ser menor o igual que el valor de precisión.For decimal or numeric, is a non-negative integer that indicates the maximum number of decimal digits that can be stored to the right of the decimal point, and it must be less than or equal to the precision. Para más información, vea decimal y numeric (Transact-SQL).For more information, see decimal and numeric (Transact-SQL).

NULL | NOT NULLNULL | NOT NULL
Especifica si el tipo puede contener un valor NULL.Specifies whether the type can hold a null value. Si no se especifica, el valor predeterminado es NULL.If not specified, NULL is the default.

assembly_nameassembly_name
Se aplica a: desde SQL Server 2008SQL Server 2008 hasta SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Especifica el ensamblado de SQL ServerSQL Server que hace referencia a la implementación del tipo definido por el usuario en Common Language Runtime.Specifies the SQL ServerSQL Server assembly that references the implementation of the user-defined type in the common language runtime. assembly_name debe coincidir con un ensamblado existente en SQL ServerSQL Server en la base de datos actual.assembly_name should match an existing assembly in SQL ServerSQL Server in the current database.

Nota

EXTERNAL_NAME no está disponible en una base de datos independiente.EXTERNAL_NAME is not available in a contained database.

[.[. class_name ]class_name ]
Se aplica a: desde SQL Server 2008SQL Server 2008 hasta SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Especifica la clase en el ensamblado que implementa el tipo definido por el usuario.Specifies the class within the assembly that implements the user-defined type. class_name debe ser un identificador válido y debe existir como clase en el ensamblado con visibilidad de ensamblado.class_name must be a valid identifier and must exist as a class in the assembly with assembly visibility. class_name distingue entre mayúsculas y minúsculas, independientemente de la intercalación de base de datos, y debe coincidir exactamente con el nombre de la clase del ensamblado correspondiente.class_name is case-sensitive, regardless of the database collation, and must exactly match the class name in the corresponding assembly. El nombre de clase puede ser un nombre de espacio de nombres entre corchetes ( [ ] ) si el lenguaje de programación usado para escribir la clase usa el concepto de espacios de nombres, como es el caso de C#.The class name can be a namespace-qualified name enclosed in square brackets ([ ]) if the programming language that is used to write the class uses the concept of namespaces, such as C#. Si no se especifica class_name, SQL ServerSQL Server considera que es el mismo que type_name.If class_name is not specified, SQL ServerSQL Server assumes it is the same as type_name.

<column_definition><column_definition>
Define las columnas para un tipo de tabla definido por el usuario.Defines the columns for a user-defined table type.

<data type><data type>
Define el tipo de datos en una columna para un tipo de tabla definido por el usuario.Defines the data type in a column for a user-defined table type. Para más información sobre los tipos de datos, vea Tipos de datos (Transact-SQL).For more information about data types, see Data Types (Transact-SQL). Para más información sobre las tablas, vea CREATE TABLE (Transact-SQL).For more information about tables, see CREATE TABLE (Transact-SQL).

<column_constraint><column_constraint>
Define las restricciones de columna para un tipo de tabla definido por el usuario.Defines the column constraints for a user-defined table type. Las restricciones compatibles incluyen PRIMARY KEY, UNIQUE y CHECK.Supported constraints include PRIMARY KEY, UNIQUE, and CHECK. Para más información sobre las tablas, vea CREATE TABLE (Transact-SQL).For more information about tables, see CREATE TABLE (Transact-SQL).

<computed_column_definition><computed_column_definition>
Define una expresión de columna calculada como una columna en un tipo de tabla definido por el usuario.Defines a computed column expression as a column in a user-defined table type. Para más información sobre las tablas, vea CREATE TABLE (Transact-SQL).For more information about tables, see CREATE TABLE (Transact-SQL).

<table_constraint><table_constraint>
Define una restricción de tabla para un tipo de tabla definido por el usuario.Defines a table constraint on a user-defined table type. Las restricciones compatibles incluyen PRIMARY KEY, UNIQUE y CHECK.Supported constraints include PRIMARY KEY, UNIQUE, and CHECK.

<index_option><index_option>
Especifica la respuesta de error para valores de clave duplicados en una operación de inserción de varias filas en un índice clúster o no clúster único.Specifies the error response to duplicate key values in a multiple-row insert operation on a unique clustered or unique nonclustered index. Para más información sobre las opciones de índice, vea CREATE INDEX (Transact-SQL).For more information about index options, see CREATE INDEX (Transact-SQL).

INDEX *index_name* [ CLUSTERED | NONCLUSTERED ] (*column_name* [ ASC | DESC ] [ ,... *n* ] )

Se aplica a: 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 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.

INDEXINDEX
Debe especificar los índices de columna y de tabla como parte de la instrucción CREATE TABLE.You must specify column and table indexes as part of the CREATE TABLE statement. CREATE INDEX y DROP INDEX no se admiten en las tablas optimizadas para memoria.CREATE INDEX and DROP INDEX are not supported for memory-optimized tables.

MEMORY_OPTIMIZEDMEMORY_OPTIMIZED
Se aplica a: 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 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 si el tipo de tabla está con optimización para memoria.Indicates whether the table type is memory optimized. Esta opción está desactivada de forma predeterminada; la tabla (tipo) no es una tabla con optimización para memoria (tipo).This option is off by default; the table (type) is not a memory optimized table (type). Los tipos de tablas optimizadas para memoria son tablas de usuario cuyo esquema se conserva en el disco de forma similar al de otras tablas de usuario.Memory optimized table types are memory-optimized user tables, the schema of which is persisted on disk similar to other user tables.

BUCKET_COUNTBUCKET_COUNT
Se aplica a: 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 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 obligatorio.bucket_count is a required argument.

HASHHASH
Se aplica a: 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 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

La clase del ensamblado a la que se hace referencia en assembly_name, junto con sus métodos, debe cumplir todos los requisitos para implementar un tipo definido por el usuario en SQL ServerSQL Server.The class of the assembly that is referenced in assembly_name, together with its methods, should satisfy all the requirements for implementing a user-defined type in SQL ServerSQL Server. Para más información sobre estos requisitos, vea CLR User-Defined Types (Tipos definidos por el usuario CLR).For more information about these requirements, see CLR User-Defined Types.

Existen algunas consideraciones adicionales, entre las que se pueden citar las siguientes:Additional considerations include the following:

  • La clase puede tener métodos sobrecargados, pero éstos solo se pueden llamar desde el código administrado, no desde Transact-SQLTransact-SQL.The class can have overloaded methods, but these methods can be called only from within managed code, not from Transact-SQLTransact-SQL.

  • Los miembros estáticos se deben declarar como const o readonly si assembly_name es SAFE o EXTERNAL_ACCESS.Any static members must be declared as const or readonly if assembly_name is SAFE or EXTERNAL_ACCESS.

Dentro de una base de datos solo puede haber un tipo definido por el usuario registrado con cualquier tipo especificado que se haya cargado en SQL ServerSQL Server desde CLR.Within a database, there can be only one user-defined type registered against any specified type that has been uploaded in SQL ServerSQL Server from the CLR. Si se crea un tipo definido por el usuario a partir de un tipo de CLR para el que ya existe un tipo definido por el usuario en la base de datos, CREATE TYPE genera un error.If a user-defined type is created on a CLR type for which a user-defined type already exists in the database, CREATE TYPE fails with an error. Esta restricción es necesaria para evitar la ambigüedad durante la resolución de tipos SQL si un tipo CLR se puede asignar a más de un tipo definido por el usuario.This restriction is required to avoid ambiguity during SQL Type resolution if a CLR type can be mapped to more than one user-defined type.

Si un método mutador del tipo no devuelve void, la instrucción CREATE TYPE no se ejecuta.If any mutator method in the type does not return void, the CREATE TYPE statement does not execute.

Para modificar un tipo definido por el usuario, debe volver a crearlo después de haberlo quitado mediante una instrucción DROP TYPE.To modify a user-defined type, you must drop the type by using a DROP TYPE statement and then re-create it.

A diferencia de los tipos definidos por el usuario y creados por medio de sp_addtype, el rol de base de datos public no recibe automáticamente el permiso REFERENCES para los tipos creados usando CREATE TYPE.Unlike user-defined types that are created by using sp_addtype, the public database role is not automatically granted REFERENCES permission on types that are created by using CREATE TYPE. Este permiso debe concederse por separado.This permission must be granted separately.

En los tipos de tabla definidos por el usuario, los tipos definidos por el usuario estructurados que se usan en column_name <data type> forman parte del ámbito del esquema de la base de datos en el que se define el tipo de tabla.In user-defined table types, structured user-defined types that are used in column_name <data type> are part of the database schema scope in which the table type is defined. Para tener acceso a los tipos definidos por el usuario estructurados en un ámbito diferente dentro de la base de datos, utilice nombres de dos partes.To access structured user-defined types in a different scope within the database, use two-part names.

En los tipos de tabla definidos por el usuario, la clave principal en las columnas calculadas debe ser PERSISTED y NOT NULL.In user-defined table types, the primary key on computed columns must be PERSISTED and NOT NULL.

Tipos de tablas con optimización para memoriaMemory-Optimized Table Types

A partir de SQL Server 2014 (12.x)SQL Server 2014 (12.x), el proceso de los datos de un tipo de tabla se puede realizar en la memoria principal y no en el disco.Beginning in SQL Server 2014 (12.x)SQL Server 2014 (12.x), processing data in a table type can be done in primary memory, and not on disk. Para obtener más información, vea OLTP en memoria (optimización en memoria).For more information, see In-Memory OLTP (In-Memory Optimization). Para ver códigos de ejemplo que ilustran cómo crear tablas optimizadas para memoria, vea Crear una tabla con optimización para memoria y un procedimiento almacenado compilado de forma nativa.For code samples showing how to create memory-optimized table types, see Creating a Memory-Optimized Table and a Natively Compiled Stored Procedure.

PermisosPermissions

Requiere el permiso CREATE TYPE en la base de datos actual y el permiso ALTER en schema_name.Requires CREATE TYPE permission in the current database and ALTER permission on schema_name. Si no se especifica schema_name , se aplican las reglas de resolución de nombres predeterminadas para determinar el esquema del usuario actual.If schema_name is not specified, the default name resolution rules for determining the schema for the current user apply. Si se especifica assembly_name, el usuario debe ser propietario del ensamblado o tener el permiso REFERENCES en él.If assembly_name is specified, a user must either own the assembly or have REFERENCES permission on it.

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.

Nota

Un usuario que crea una tabla con una columna que utiliza un tipo definido por el usuario necesita el permiso REFERENCES en el tipo definido por el usuario.A user creating a table with a column that uses a user-defined type needs the REFERENCES permission on the user-defined type. Si esta tabla se debe crear en TempDB, entonces el permiso REFERENCES debe concederse explícitamente cada vez antes de que se cree la tabla, o este tipo de datos y los permisos REFERENCES deben agregarse a la base de datos Model.If this table must be created in TempDB, then either the REFERENCES permission needs to be granted explicitly each time before the table is created, or this data type and REFERENCES permissions need to be added to the Model database. Si esto se hace, entonces este tipo de datos y permisos estarán disponibles en TempDB permanentemente.If this is done, then this data type and permissions will be available in TempDB permanently. De lo contrario, los permisos y el tipo de datos definidos por el usuario desaparecerán cuando se reinicie SQL Server.Otherwise, the user-defined data type and permissions will disappear when SQL Server is restarted. Para más información, consulte CREATE TABLE.For more information, see CREATE TABLE

EjemplosExamples

A.A. Crear un tipo de alias basado en el tipo de datos varcharCreating an alias type based on the varchar data type

En el ejemplo siguiente se crea un tipo de alias basado en el tipo de datos varchar suministrado por el sistema.The following example creates an alias type based on the system-supplied varchar data type.

CREATE TYPE SSN  
FROM varchar(11) NOT NULL ;  

B.B. Crear un tipo definido por el usuarioCreating a user-defined type

En el siguiente ejemplo se crea un tipo Utf8String que hace referencia a la clase utf8string del ensamblado utf8string.The following example creates a type Utf8String that references class utf8string in the assembly utf8string. Antes de crear el tipo, se registra el ensamblado utf8string en la base de datos local.Before creating the type, assembly utf8string is registered in the local database. Reemplace la parte binaria de la instrucción CREATE ASSEMBLY con una descripción válida.Replace the binary portion of the CREATE ASSEMBLY statement with a valid description.

Se aplica a: desde SQL Server 2008SQL Server 2008 hasta SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

CREATE ASSEMBLY utf8string  
AUTHORIZATION [dbi]   
FROM 0x4D... ;  
GO  
CREATE TYPE Utf8String   
EXTERNAL NAME utf8string.[Microsoft.Samples.SqlServer.utf8string] ;  
GO  

C.C. Crear un tipo de tabla definido por el usuarioCreating a user-defined table type

En el siguiente ejemplo se crea un tipo de tabla definido por el usuario con dos columnas.The following example creates a user-defined table type that has two columns. Para más información sobre cómo crear y usar parámetros con valores de tabla, veaUsar parámetros con valores de tabla (motor de base de datos).For more information about how to create and use table-valued parameters, see Use Table-Valued Parameters (Database Engine).

CREATE TYPE LocationTableType AS TABLE   
    ( LocationName VARCHAR(50)  
    , CostRate INT );  
GO  

D.D. Creación de un tipo de tabla definido por el usuario con el índice y la clave principalCreating a user-defined table type with primary key and index

En el ejemplo siguiente se crea un tipo de tabla definido por el usuario que tiene tres columnas, una de las cuales (Name) es la clave principal y la otra (Price) tiene un índice no agrupado.The following example creates a user-defined table type that has three columns, one of which (Name) is the primary key and another (Price) has a nonclustered index. Para más información sobre cómo crear y usar parámetros con valores de tabla, veaUsar parámetros con valores de tabla (motor de base de datos).For more information about how to create and use table-valued parameters, see Use Table-Valued Parameters (Database Engine).

CREATE TYPE InventoryItem AS TABLE
(
    [Name] NVARCHAR(50) NOT NULL,
    SupplierId BIGINT NOT NULL,
    Price DECIMAL (18, 4) NULL,
    PRIMARY KEY (
        Name
    ),
    INDEX IX_InventoryItem_Price (
        Price
    )
)
GO

Consulte tambiénSee Also

CREATE ASSEMBLY (Transact-SQL) CREATE ASSEMBLY (Transact-SQL)
DROP TYPE (Transact-SQL) DROP TYPE (Transact-SQL)
EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)