CREATE TYPE (Transact-SQL)CREATE TYPE (Transact-SQL)

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Crea un tipo di dati alias o un tipo definito dall'utente (UDT) nel database corrente in SQL ServerSQL Server o Database SQL di AzureAzure SQL Database.Creates an alias data type or a user-defined type in the current database in SQL ServerSQL Server or Database SQL di AzureAzure SQL Database. L'implementazione di un tipo di dati alias è basata su un tipo di sistema nativo di SQL ServerSQL Server.The implementation of an alias data type is based on a SQL ServerSQL Server native system type. I tipi definiti dall'utente vengono invece implementati tramite una classe di un assembly CLR (Common Language Runtime) di 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). Per associare un tipo definito dall'utente alla relativa implementazione, è necessario prima registrare l'assembly CLR che contiene l'implementazione del tipo in SQL ServerSQL Server tramite 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.

Per impostazione predefinita, l'esecuzione di codice CLR è disattivata in SQL ServerSQL Server.The ability to run CLR code is off by default in SQL ServerSQL Server. È possibile creare, modificare ed eliminare oggetti di database che fanno riferimento a moduli di codice gestito, ma tali riferimenti non verranno eseguiti in SQL ServerSQL Server a meno che non si abiliti l'opzione clr enabled tramite 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

In questo argomento viene illustrata l'integrazione di CLR di .NET Framework in SQL Server.The integration of .NET Framework CLR into SQL Server is discussed in this topic. L'integrazione di CLR non si applica al Database SQLSQL Database di Azure.CLR integration does not apply to Azure Database SQLSQL Database.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

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

ArgomentiArguments

schema_nameschema_name
Nome dello schema a cui appartiene il tipo di dati alias o il tipo definito dall'utente.Is the name of the schema to which the alias data type or user-defined type belongs.

type_nametype_name
Nome del tipo di dati alias o del tipo definito dall'utente.Is the name of the alias data type or user-defined type. I nomi dei tipi devono essere conformi alle regole per gli identificatori.Type names must comply with the rules for identifiers.

base_typebase_type
È il tipo di dati di SQL ServerSQL Server su cui è basato il tipo di dati alias.Is the SQL ServerSQL Server supplied data type on which the alias data type is based. base_type è di tipo sysname e non prevede alcun valore predefinito. I possibili valori sono i seguenti: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 )
datadate datetimedatetime datetime2datetime2 datetimeoffsetdatetimeoffset
decimaldecimal floatfloat imageimage intint
moneymoney nchar( n )nchar( n ) ntextntext numericnumeric
nvarchar( n | max)nvarchar( n | max) realreal smalldatetimesmalldatetime smallintsmallint
smallmoneysmallmoney sql_variantsql_variant texttext timetime
tinyinttinyint uniqueidentifieruniqueidentifier varbinary( n | max)varbinary( n | max) varchar( n | max)varchar( n | max)

Per l'argomento base_type è anche possibile specificare qualsiasi sinonimo di tipo di dati che esegue il mapping a uno di questi tipi di dati di sistema.base_type can also be any data type synonym that maps to one of these system data types.

precisioneprecision
Per i tipi decimal o numeric, valore integer non negativo che indica il numero massimo totale di cifre decimali che è possibile archiviare, sia a sinistra che a destra del separatore decimale.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. Per altre informazioni, vedere decimal e numeric (Transact-SQL).For more information, see decimal and numeric (Transact-SQL).

scalascale
Per i tipi decimal o numeric, valore integer non negativo che indica il numero massimo di cifre decimali che è possibile archiviare a destra del separatore decimale. Deve essere minore o uguale al valore della precisione.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. Per altre informazioni, vedere decimal e numeric (Transact-SQL).For more information, see decimal and numeric (Transact-SQL).

NULL | NOT NULLNULL | NOT NULL
Specifica se il tipo supporta la memorizzazione di valori Null.Specifies whether the type can hold a null value. Se omesso, l'impostazione predefinita è NULL.If not specified, NULL is the default.

assembly_nameassembly_name
Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2019SQL Server 2019.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2019SQL Server 2019.

Specifica l'assembly di SQL ServerSQL Server che fa riferimento all'implementazione del tipo definito dall'utente in CLR.Specifies the SQL ServerSQL Server assembly that references the implementation of the user-defined type in the common language runtime. assembly_name deve corrispondere a un assembly esistente in SQL ServerSQL Server nel database corrente.assembly_name should match an existing assembly in SQL ServerSQL Server in the current database.

Nota

EXTERNAL_NAME non è disponibile in un database indipendente.EXTERNAL_NAME is not available in a contained database.

[.[. class_name ]class_name ]
Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2019SQL Server 2019.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2019SQL Server 2019.

Specifica la classe nell'assembly che implementa il tipo definito dall'utente.Specifies the class within the assembly that implements the user-defined type. class_name deve essere un identificatore valido e deve esistere come classe nell'assembly con visibilità dell'assembly.class_name must be a valid identifier and must exist as a class in the assembly with assembly visibility. class_name supporta la distinzione tra maiuscole e minuscole, indipendentemente dalle regole di confronto del database e deve corrispondere esattamente al nome di classe nell'assembly corrispondente.class_name is case-sensitive, regardless of the database collation, and must exactly match the class name in the corresponding assembly. Il nome di classe può essere un nome completo con lo spazio dei nomi e racchiuso tra parentesi quadre ( [ ] ) se il linguaggio di programmazione usato per scrivere la classe usa il concetto degli spazi dei nomi, come nel caso, ad esempio, di 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#. Se class_name viene omesso, SQL ServerSQL Server presume che equivalga a type_name.If class_name is not specified, SQL ServerSQL Server assumes it is the same as type_name.

<column_definition><column_definition>
Definisce le colonne per un tipo di tabella definito dall'utente.Defines the columns for a user-defined table type.

<data type><data type>
Definisce il tipo di dati in una colonna con un tipo di tabella definito dall'utente.Defines the data type in a column for a user-defined table type. Per altre informazioni sui tipi di dati , vedere Tipi di dati (Transact-SQL).For more information about data types, see Data Types (Transact-SQL). Per altre informazioni sulle tabelle , vedere CREATE TABLE (Transact-SQL).For more information about tables, see CREATE TABLE (Transact-SQL).

<column_constraint><column_constraint>
Definisce i vincoli di colonna per un tipo di tabella definito dall'utente.Defines the column constraints for a user-defined table type. I vincoli supportati includono PRIMARY KEY, UNIQUE e CHECK.Supported constraints include PRIMARY KEY, UNIQUE, and CHECK. Per altre informazioni sulle tabelle , vedere CREATE TABLE (Transact-SQL).For more information about tables, see CREATE TABLE (Transact-SQL).

<computed_column_definition><computed_column_definition>
Definisce un'espressione di colonna calcolata come una colonna in un tipo di tabella definito dall'utente.Defines a computed column expression as a column in a user-defined table type. Per altre informazioni sulle tabelle , vedere CREATE TABLE (Transact-SQL).For more information about tables, see CREATE TABLE (Transact-SQL).

<table_constraint><table_constraint>
Definisce un vincolo di tabella per un tipo di tabella definito dall'utente.Defines a table constraint on a user-defined table type. I vincoli supportati includono PRIMARY KEY, UNIQUE e CHECK.Supported constraints include PRIMARY KEY, UNIQUE, and CHECK.

<index_option><index_option>
Specifica il tipo di risposta in caso di errori di valori di chiave duplicati in un'operazione di inserimento di più righe su un indice cluster o non cluster univoco.Specifies the error response to duplicate key values in a multiple-row insert operation on a unique clustered or unique nonclustered index. Per altre informazioni sulle opzioni per gli indici, vedere 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* ] )

Si applica a : da SQL Server 2014 (12.x)SQL Server 2014 (12.x) fino a SQL Server 2019SQL Server 2019 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2019SQL Server 2019 and Database SQL di AzureAzure SQL Database.

Specifica che deve essere creato un indice per la tabella.Specifies to create an index on the table. Può trattarsi di un indice cluster o un indice non cluster.This can be a clustered index, or a nonclustered index. L'indice conterrà le colonne indicate e i dati in ordine crescente o decrescente.The index will contain the columns listed, and will sort the data in either ascending or descending order.

INDEXINDEX
È necessario specificare gli indici di tabella e di colonna come parte dell'istruzione CREATE TABLE.You must specify column and table indexes as part of the CREATE TABLE statement. CREATE INDEX e DROP INDEX non sono supportati per le tabelle ottimizzate per la memoria.CREATE INDEX and DROP INDEX are not supported for memory-optimized tables.

MEMORY_OPTIMIZEDMEMORY_OPTIMIZED
Si applica a : da SQL Server 2014 (12.x)SQL Server 2014 (12.x) fino a SQL Server 2019SQL Server 2019 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2019SQL Server 2019 and Database SQL di AzureAzure SQL Database.

Indica se il tipo di tabella è con ottimizzazione per la memoria.Indicates whether the table type is memory optimized. Questa opzione è disabilitata per impostazione predefinita; il tipo di tabella o la tabella non è con ottimizzazione per la memoria.This option is off by default; the table (type) is not a memory optimized table (type). I tipi di tabella ottimizzata per la memoria sono tabelle utente ottimizzate per la memoria, il cui schema è persistente su disco in modo analogo ad altre tabelle utente.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
Si applica a : da SQL Server 2014 (12.x)SQL Server 2014 (12.x) fino a SQL Server 2019SQL Server 2019 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2019SQL Server 2019 and Database SQL di AzureAzure SQL Database.

Indica il numero di bucket che deve essere creato nell'indice hash.Indicates the number of buckets that should be created in the hash index. Il valore massimo per BUCKET_COUNT in indici hash è 1.073.741.824.The maximum value for BUCKET_COUNT in hash indexes is 1,073,741,824. Per altre informazioni sui numeri di bucket, vedere Indici in tabelle con ottimizzazione per la memoria.For more information about bucket counts, see Indexes for Memory-Optimized Tables. bucket_count è un argomento obbligatorio.bucket_count is a required argument.

HASHHASH
Si applica a : da SQL Server 2014 (12.x)SQL Server 2014 (12.x) fino a SQL Server 2019SQL Server 2019 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2019SQL Server 2019 and Database SQL di AzureAzure SQL Database.

Indica che viene creato un indice HASH.Indicates that a HASH index is created. Gli indici hash sono supportati solo nelle tabelle con ottimizzazione per la memoria.Hash indexes are supported only on memory optimized tables.

RemarksRemarks

La classe dell'assembly cui si fa riferimento in assembly_name e i relativi metodi devono soddisfare tutti i requisiti per l'implementazione di un tipo definito dall'utente in 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. Per altre informazioni su tali requisiti, vedere Tipi CLR definiti dall'utente.For more information about these requirements, see CLR User-Defined Types.

Ulteriori considerazioni:Additional considerations include the following:

  • La classe può contenere metodi di overload, ma tali metodi possono essere chiamati solo da codice gestito e non da 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.

  • Tutti i membri statici devono essere dichiarati come const o readonly se assembly_name è impostato su SAFE o EXTERNAL_ACCESS.Any static members must be declared as const or readonly if assembly_name is SAFE or EXTERNAL_ACCESS.

Nell'ambito di un database può esistere un solo tipo definito dall'utente registrato per qualsiasi tipo specificato caricato in SQL ServerSQL Server da 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. Se si crea un tipo definito dall'utente basato su un tipo CLR per cui esiste già un tipo definito dall'utente nel database, l'istruzione CREATE TYPE viene interrotta e viene generato un errore.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. Questa restrizione risulta necessaria per evitare ambiguità durante la risoluzione dei tipi SQL, nel caso su un tipo CLR possa essere eseguito il mapping a più di un tipo definito dall'utente.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.

Se qualsiasi metodo mutatore nel tipo non restituisce void, l'istruzione CREATE TYPE non viene eseguita.If any mutator method in the type does not return void, the CREATE TYPE statement does not execute.

Per modificare un tipo definito dall'utente, è necessario eliminare il tipo tramite l'istruzione DROP TYPE e quindi ricrearlo.To modify a user-defined type, you must drop the type by using a DROP TYPE statement and then re-create it.

Diversamente dai tipi definiti dall'utente creati tramite sp_addtype, al ruolo del database public non viene concessa automaticamente l'autorizzazione REFERENCES per i tipi creati tramite 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. È necessario concedere l'autorizzazione separatamente.This permission must be granted separately.

Nei tipi di tabella definiti dall'utente, i tipi strutturati definiti dall'utente usati in column_name <data type> sono parte dell'ambito dello schema del database in cui il tipo di tabella è definito.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. Per accedere ai tipi strutturati definiti dall'utente in un ambito diverso all'interno del database, usare nomi in due parti.To access structured user-defined types in a different scope within the database, use two-part names.

Nei tipi di tabella definiti dall'utente, la chiave primaria sulle colonne calcolate deve essere PERSISTED e NOT NULL.In user-defined table types, the primary key on computed columns must be PERSISTED and NOT NULL.

Tipi di tabella con ottimizzazione per la memoriaMemory-Optimized Table Types

A partire da SQL Server 2014 (12.x)SQL Server 2014 (12.x), l'elaborazione dei dati in un tipo di tabella può essere eseguita nella memoria primaria e non su 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. Per altre informazioni, vedere OLTP in memoria (ottimizzazione in memoria).For more information, see In-Memory OLTP (In-Memory Optimization). Per esempi di codice che illustrano come creare tipi di tabelle ottimizzate per la memoria, vedere Creazione di una tabella con ottimizzazione per la memoria e di una stored procedure compilata in modo nativo.For code samples showing how to create memory-optimized table types, see Creating a Memory-Optimized Table and a Natively Compiled Stored Procedure.

AutorizzazioniPermissions

È richiesta l'autorizzazione CREATE TYPE nel database corrente e l'autorizzazione ALTER per schema_name.Requires CREATE TYPE permission in the current database and ALTER permission on schema_name. Se schema_name viene omesso, vengono applicate le regole predefinite per la risoluzione dei nomi per determinare lo schema dell'utente corrente.If schema_name is not specified, the default name resolution rules for determining the schema for the current user apply. Se l'argomento assembly_name viene specificato, è necessario che l'utente sia il proprietario dell'assembly o che abbia l'autorizzazione REFERENCES per tale assembly.If assembly_name is specified, a user must either own the assembly or have REFERENCES permission on it.

Se una colonna nell'istruzione CREATE TABLE è definita con un tipo definito dall'utente, è necessaria l'autorizzazione REFERENCES per il tipo definito dall'utente.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 utente che crea una tabella con una colonna che usa un tipo definito dall'utente necessita dell'autorizzazione REFERENCES per il tipo definito dall'utente.A user creating a table with a column that uses a user-defined type needs the REFERENCES permission on the user-defined type. Se questa tabella deve essere creata in TempDB, è necessario concedere ogni volta l'autorizzazione REFERENCES in modo esplicito prima che la tabella venga creata oppure è necessario aggiungere questo tipo di dati e le autorizzazioni REFERENCES al database modello.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. In tal caso, questo tipo di dati e le autorizzazioni saranno disponibili in TempDB in modo permanente.If this is done, then this data type and permissions will be available in TempDB permanently. In caso contrario, il tipo di dati definito dall'utente e le autorizzazioni verranno rimossi al riavvio di SQL Server.Otherwise, the user-defined data type and permissions will disappear when SQL Server is restarted. Per altre informazioni, vedere CREATE TABLE.For more information, see CREATE TABLE

EsempiExamples

A.A. Creazione di un tipo alias basato sul tipo di dati varcharCreating an alias type based on the varchar data type

Nell'esempio seguente viene creato un tipo alias basato sul tipo di dati di sistema varchar.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. Creazione di un tipo definito dall'utenteCreating a user-defined type

Nell'esempio seguente viene creato un tipo Utf8String che fa riferimento alla classe utf8string nell'assembly utf8string.The following example creates a type Utf8String that references class utf8string in the assembly utf8string. Prima di creare il tipo, l'assembly utf8string viene registrato nel database locale.Before creating the type, assembly utf8string is registered in the local database. Sostituire la parte binaria dell'istruzione CREATE ASSEMBLY con una descrizione valida.Replace the binary portion of the CREATE ASSEMBLY statement with a valid description.

Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2019SQL Server 2019.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2019SQL Server 2019.

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

C.C. Creazione di un tipo di tabella definito dall'utenteCreating a user-defined table type

Nell'esempio seguente viene creato un tipo di tabella definito dall'utente con due colonne.The following example creates a user-defined table type that has two columns. Per altre informazioni su come creare e usare parametri con valori di tabella, vedere Usare parametri con valori di tabella (motore di database).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. Creazione di un tipo di tabella definito dall'utente con chiave primaria e indiceCreating a user-defined table type with primary key and index

Nell'esempio seguente viene creato un tipo di tabella definito dall'utente che contiene tre colonne, una delle quali (Name) è la chiave primaria e un'altra (Price) ha un indice non cluster.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. Per altre informazioni su come creare e usare parametri con valori di tabella, vedere Usare parametri con valori di tabella (motore di database).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

Vedere ancheSee Also

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