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

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2008)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Crea una nuova tabella in SQL ServerSQL Server e Database SQL di AzureAzure SQL Database.Creates a new table in SQL ServerSQL Server and Database SQL di AzureAzure SQL Database.

Nota

Per SQL Data WarehouseSQL Data Warehouse sintassi, vedere CREATE TABLE (Azure SQL Data Warehouse).For SQL Data WarehouseSQL Data Warehouse syntax, see CREATE TABLE (Azure SQL Data Warehouse).

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

SintassiSyntax

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

SintassiSyntax

--Disk-Based CREATE TABLE Syntax  
CREATE TABLE   
    [ database_name . [ schema_name ] . | schema_name . ] table_name   
    [ AS FileTable ]  
    ( {   <column_definition>   
        | <computed_column_definition>    
        | <column_set_definition>   
        | [ <table_constraint> ]   
        | [ <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 }   
  | ALLOW_ROW_LOCKS = { ON | OFF}   
  | ALLOW_PAGE_LOCKS ={ 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 ] . | schema_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 } ] ) ]   

}  

ArgomentiArguments

database_namedatabase_name
Nome del database in cui è viene creata la tabella.Is the name of the database in which the table is created. database_name deve specificare il nome di un database esistente.database_name must specify the name of an existing database. Se non specificato, database_name impostazioni predefinite per il database corrente.If not specified, database_name defaults to the current database. L'account di accesso per la connessione corrente deve essere associata a un ID utente esistente nel database specificato da database_name, e all'ID utente deve disporre delle autorizzazioni 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_nameschema_name
Nome dello schema a cui appartiene la nuova tabella.Is the name of the schema to which the new table belongs.

table_nametable_name
Nome della nuova tabella.Is the name of the new table. I nomi di tabella devono seguire le regole per identificatori.Table names must follow the rules for identifiers. TABLE_NAME può contenere un massimo di 128 caratteri, ad eccezione dei nomi di tabella temporanea locale (i nomi preceduti da un solo simbolo di cancelletto (#)) che non può superare i 116 caratteri.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

Si applica a: SQL Server 2012SQL Server 2012 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

Consente di creare la nuova tabella come tabella FileTable.Creates the new table as a FileTable. Non è necessario specificare le colonne, perché una tabella FileTable è associata a uno schema fisso.You do not specify columns because a FileTable has a fixed schema. Per ulteriori informazioni su tabelle Filetable, vedere FileTables ( SQL Server ) .For more information about FileTables, see FileTables (SQL Server).

column_namecolumn_name
computed_column_expressioncomputed_column_expression
Espressione che definisce il valore di una colonna calcolata.Is an expression that defines the value of a computed column. Una colonna calcolata è una colonna virtuale che non viene archiviata fisicamente nella tabella, a meno che non sia contrassegnata come PERSISTED.A computed column is a virtual column that is not physically stored in the table, unless the column is marked PERSISTED. Questo tipo di colonna viene calcolata in base a un'espressione che utilizza altre colonne nella stessa tabella.The column is computed from an expression that uses other columns in the same table. Ad esempio, una colonna calcolata può avere la definizione: costo AS prezzo * qty. L'espressione può essere un nome di colonna non calcolata, una costante, una funzione, una variabile e qualsiasi combinazione di questi elementi uniti da uno o più operatori.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. L'espressione non può essere una sottoquery o contenere tipi di dati alias.The expression cannot be a subquery or contain alias data types.

È possibile usare le colonne calcolate in elenchi di selezione, clausole WHERE e ORDER BY o in qualsiasi altra posizione in cui è consentito l'utilizzo di espressioni regolari, con le eccezioni seguenti: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:

  • Le colonne calcolate devono essere contrassegnate come PERSISTED per partecipare a un vincolo CHECK o FOREIGN KEY.Computed columns must be marked PERSISTED to participate in a FOREIGN KEY or CHECK constraint.

  • È possibile usare una colonna calcolata come colonna chiave di un indice o come parte di un vincolo PRIMARY KEY o UNIQUE, a condizione che il valore della colonna sia definito da un'espressione deterministica e il tipo di dati del risultato sia supportato nelle colonne dell'indice.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.

    Ad esempio, se la tabella include colonne di tipo integer un e b, la colonna calcolata + b potrebbero essere indicizzati, ma non la colonna calcolata + DATEPART (dd, GETDATE non può essere indicizzata perché il valore potrebbe cambiare nelle chiamate successive.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.

  • Non è possibile usare una colonna calcolata in un'istruzione INSERT o UPDATE.A computed column cannot be the target of an INSERT or UPDATE statement.

Nota

Ogni riga di una tabella può includere valori diversi per le colonne correlate a una colonna calcolata. È pertanto possibile che non sia disponibile lo stesso valore per ciascuna riga della colonna calcolata.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.

In base alle espressioni utilizzate, il supporto dei valori Null per le colonne calcolate viene determinato automaticamente da Motore di databaseDatabase Engine.Based on the expressions that are used, the nullability of computed columns is determined automatically by the Motore di databaseDatabase Engine. Si presuppone che il risultato della maggior parte delle espressioni ammetta valori Null anche se sono presenti solo colonne in cui tali valori non sono ammessi, perché anche i possibili underflow oppure overflow generano risultati 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. Utilizzare la funzione COLUMNPROPERTY con la AllowsNull proprietà i valori null delle colonne calcolate in una tabella.Use the COLUMNPROPERTY function with the AllowsNull property to investigate the nullability of any computed column in a table. Un'espressione che ammette valori null può essere convertita in uno di tali valori non specificando ISNULL con la check_expression costante, in cui la costante è un valore non null sostituito per qualsiasi risultato 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. Per le colonne calcolate basate su espressioni di tipo CLR (Common Language Runtime) definito dall'utente è richiesta l'autorizzazione REFERENCES per il tipo.REFERENCES permission on the type is required for computed columns based on common language runtime (CLR) user-defined type expressions.

PERSISTEDPERSISTED
Specifica che Motore di database di SQL ServerSQL Server Database Engine archivierà fisicamente i valori calcolati nella tabella e aggiornerà i valori in caso di aggiornamento di eventuali altre colonne da cui dipende la colonna calcolata.Specifies that the Motore di database di 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. Quando si contrassegna una colonna calcolata come PERSISTED, è possibile creare un indice deterministico, ma non preciso, in una colonna calcolata.Marking a computed column as PERSISTED lets you create an index on a computed column that is deterministic, but not precise. Per altre informazioni, vedere Indici per le colonne calcolate.For more information, see Indexes on Computed Columns. Le colonne calcolate utilizzate come colonne di partizionamento di una tabella partizionata devono essere contrassegnate con PERSISTED in modo esplicito.Any computed columns that are used as partitioning columns of a partitioned table must be explicitly marked PERSISTED. computed_column_expression deve essere deterministica se è specificato PERSISTED.computed_column_expression must be deterministic when PERSISTED is specified.

ON { partition_scheme | filegroup | "predefinito" }ON { partition_scheme | filegroup | "default" }

Specifica lo schema di partizione o il filegroup in cui la tabella viene archiviata.Specifies the partition scheme or filegroup on which the table is stored. Se partition_scheme viene specificato, la tabella deve essere una tabella partizionata con partizioni sono archiviate in un set di uno o più filegroup specificato in partition_scheme.If partition_scheme is specified, the table is to be a partitioned table whose partitions are stored on a set of one or more filegroups specified in partition_scheme. Se filegroup viene specificato, la tabella è archiviata nel filegroup specificato.If filegroup is specified, the table is stored in the named filegroup. Il filegroup deve essere presente nel database.The filegroup must exist within the database. Se "predefinito" viene specificato, o se ON non è specificato, la tabella è archiviata nel filegroup predefinito.If "default" is specified, or if ON is not specified at all, the table is stored on the default filegroup. Il meccanismo di archiviazione di una tabella specificato in CREATE TABLE non può essere modificato in seguito.The storage mechanism of a table as specified in CREATE TABLE cannot be subsequently altered.

ON {partition_scheme | filegroup | "predefinito"} può anche essere specificato in una chiave primaria o un vincolo UNIQUE.ON {partition_scheme | filegroup | "default"} can also be specified in a PRIMARY KEY or UNIQUE constraint. Questi vincoli comportano la creazione di indici.These constraints create indexes. Se filegroup viene specificato, l'indice è archiviato nel filegroup specificato.If filegroup is specified, the index is stored in the named filegroup. Se "predefinito" viene specificato, o se ON non è specificato, l'indice viene archiviato nello stesso filegroup della tabella.If "default" is specified, or if ON is not specified at all, the index is stored in the same filegroup as the table. Se il vincolo PRIMARY KEY o UNIQUE crea un indice cluster, le pagine di dati della tabella vengono archiviate nello stesso filegroup dell'indice.If the PRIMARY KEY or UNIQUE constraint creates a clustered index, the data pages for the table are stored in the same filegroup as the index. Se si specifica CLUSTERED o il vincolo in caso contrario viene creato un indice cluster e un partition_scheme viene specificato che è diverso dal partition_scheme o filegroup della definizione di tabella, o viceversa, verrà rispettata solo la definizione di vincolo e l'altro verrà ignorato.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

In questo contesto, default non è una parola chiave,In this context, default is not a keyword. È un identificatore per il filegroup predefinito e deve essere delimitato, ad esempio ON "predefinito" oppure ON [predefinito].It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [default]. Se "predefinito" viene specificato, l'opzione QUOTED_IDENTIFIER deve essere impostata su ON per la sessione corrente.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Si tratta dell'impostazione predefinita.This is the default setting. Per altre informazioni, vedere SET QUOTED_IDENTIFIER (Transact-SQL).For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

Nota

Dopo avere creato una tabella partizionata, impostare l'opzione LOCK_ESCALATION per la tabella su AUTO.After you create a partitioned table, consider setting the LOCK_ESCALATION option for the table to AUTO. In questo modo è possibile migliorare la concorrenza consentendo ai blocchi di eseguire l'escalation a livello di partizione (HoBT) anziché di tabella.This can improve concurrency by enabling locks to escalate to partition (HoBT) level instead of the table. Per altre informazioni, vedere ALTER TABLE (Transact-SQL).For more information, see ALTER TABLE (Transact-SQL).

TEXTIMAGE_ON { filegroup| "predefinito" }TEXTIMAGE_ON { filegroup| "default" }
Indica che il testo, ntext, immagine, xml, varchar (max), nvarchar (max), varbinary (max), e le colonne di tipo definito dall'utente CLR (inclusi geometry e geography) vengono archiviate nel filegroup specificato.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.

La parola chiave TEXTIMAGE_ON non è consentita se la tabella non include colonne con valori di grandi dimensioni.TEXTIMAGE_ON is not allowed if there are no large value columns in the table. Non è possibile specificare TEXTIMAGE_ON se partition_scheme specificato.TEXTIMAGE_ON cannot be specified if partition_scheme is specified. Se "predefinito" viene specificato, o se viene omessa in tutti, le colonne di valori di grandi dimensioni vengono archiviate nel filegroup predefinito.If "default" is specified, or if TEXTIMAGE_ON is not specified at all, the large value columns are stored in the default filegroup. Il tipo di archiviazione per i dati di colonne con valori di grandi dimensioni specificato in CREATE TABLE non può essere modificato in seguito.The storage of any large value column data specified in CREATE TABLE cannot be subsequently altered.

Nota

Varchar (max), nvarchar (max), varbinary (max), xml e valori UDT di grandi dimensioni vengono archiviate direttamente nella riga di dati, con un limite massimo di 8000 byte e purché il valore può corrispondere al record.Varchar(max), nvarchar(max), varbinary(max), xml and large UDT values are stored directly in the data row, up to a limit of 8000 bytes and as long as the value can fit the record. Se il valore non rientra nel record, un puntatore viene ordinato in righe e il resto viene archiviato all'esterno della riga nello spazio di archiviazione 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 è il valore predefinito.0 is the default value. TEXTIMAGE_ON modifica solo la posizione di "spazio di archiviazione LOB", non si applica quando i dati sono archiviati nella riga.TEXTIMAGE_ON only changes the location of the "LOB storage space", it does not affect when data is stored in-row. Utilizzare large value types out of row di sp_tableoption per archiviare l'intero valore LOB all'esterno delle righe.Use large value types out of row option of sp_tableoption to store the entire LOB value out of the row.

Nota

In questo contesto, default non è una parola chiave,In this context, default is not a keyword. È un identificatore per il filegroup predefinito e deve essere delimitato, ad esempio TEXTIMAGE_ON "predefinito" o TEXTIMAGE_ON [predefinito].It is an identifier for the default filegroup and must be delimited, as in TEXTIMAGE_ON "default" or TEXTIMAGE_ON [default]. Se "predefinito" viene specificato, l'opzione QUOTED_IDENTIFIER deve essere impostata su ON per la sessione corrente.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Si tratta dell'impostazione predefinita.This is the default setting. Per altre informazioni, vedere SET QUOTED_IDENTIFIER (Transact-SQL).For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

FILESTREAM_ON { partition_scheme_name | filegroup | "predefinito" } si applica a: SQL ServerSQL Server.FILESTREAM_ON { partition_scheme_name | filegroup | "default" } Applies to: SQL ServerSQL Server.

Specifica il filegroup per i dati FILESTREAM.Specifies the filegroup for FILESTREAM data.

Se la tabella è partizionata e contiene dati FILESTREAM, la clausola FILESTREAM_ON deve essere inclusa e deve specificare uno schema di partizione dei filegroup FILESTREAMIf 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. che utilizzi la stessa funzione e le stesse colonne di partizione dello schema di partizione per la tabella. In caso contrario, verrà generato un errore.This partition scheme must use the same partition function and partition columns as the partition scheme for the table; otherwise, an error is raised.

Se la tabella non è partizionata, la colonna FILESTREAM non può essere partizionata.If the table is not partitioned, the FILESTREAM column cannot be partitioned. I dati FILESTREAM per la tabella devono essere archiviati in un singolo filegroup,FILESTREAM data for the table must be stored in a single filegroup. specificato nella clausola FILESTREAM_ON.This filegroup is specified in the FILESTREAM_ON clause.

Se la tabella non è partizionata e la clausola FILESTREAM_ON non è specificata, viene utilizzato il filegroup FILESTREAM per cui è impostata la proprietà DEFAULT.If the table is not partitioned and the FILESTREAM_ON clause is not specified, the FILESTREAM filegroup that has the DEFAULT property set is used. Se non è presente alcun filegroup FILESTREAM, viene generato un errore.If there is no FILESTREAM filegroup, an error is raised.

  • Analogamente a ON e TEXTIMAGE_ON, il valore impostato utilizzando CREATE TABLE per FILESTREAM_ON non può essere modificato, ad eccezione dei casi seguenti:As with ON and TEXTIMAGE_ON, the value set by using CREATE TABLE for FILESTREAM_ON cannot be changed, except in the following cases:

  • Oggetto CREATE INDEX istruzione converte un heap in un indice cluster.A CREATE INDEX statement converts a heap into a clustered index. In questo caso è possibile specificare un filegroup FILESTREAM diverso, uno schema di partizione o NULL.In this case, a different FILESTREAM filegroup, partition scheme, or NULL can be specified.

  • Oggetto DROP INDEX istruzione converte un indice cluster in un heap.A DROP INDEX statement converts a clustered index into a heap. In questo caso, un filegroup FILESTREAM diverso, uno schema di partizione o "predefinito" può essere specificato.In this case, a different FILESTREAM filegroup, partition scheme, or "default" can be specified.

    Il filegroup nel FILESTREAM_ON <filegroup> clausola o ogni filegroup FILESTREAM denominato nello schema di partizione, è necessario un file definito per il filegroup.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. Questo file deve essere definito utilizzando un CREATE DATABASE o ALTER DATABASE istruzione; in caso contrario, viene generato un errore.This file must be defined by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

    Per argomenti correlati a FILESTREAM, vedere Binary Large Object ( BLOB ) Dati ( SQL Server ) .For related FILESTREAM topics, see Binary Large Object (Blob) Data (SQL Server).

    [ type_schema_name.[ type_schema_name. ] type_name] type_name
    Specifica il tipo di dati della colonna e lo schema a cui appartiene.Specifies the data type of the column, and the schema to which it belongs. Per le tabelle basate su disco, il tipo di dati può essere uno dei seguenti:For disk-based tables, the data type can be one of the following:

  • Tipo di dati di sistema.A system data type.

  • Tipo di alias basato su un tipo di dati di sistema di SQL ServerSQL Server.An alias type based on a SQL ServerSQL Server system data type. Per consentirne l'utilizzo in una definizione di tabella, i tipi di dati alias vengono creati con l'istruzione CREATE TYPE.Alias data types are created with the CREATE TYPE statement before they can be used in a table definition. L'assegnazione NULL o NOT NULL per un tipo di dati alias può essere ignorata durante l'esecuzione dell'istruzione CREATE TABLE.The NULL or NOT NULL assignment for an alias data type can be overridden during the CREATE TABLE statement. Non è tuttavia possibile modificare l'impostazione della lunghezza. In un'istruzione CREATE TABLE non è possibile specificare la lunghezza per un tipo di dati alias.However, the length specification cannot be changed; the length for an alias data type cannot be specified in a CREATE TABLE statement.

  • Tipo CLR definito dall'utente.A CLR user-defined type. I tipi CLR definiti dall'utente devono essere creati con l'istruzione CREATE TYPE prima di poterli usare in una definizione di tabella.CLR user-defined types are created with the CREATE TYPE statement before they can be used in a table definition. Per creare una colonna con un tipo CLR definito dall'utente, è richiesta l'autorizzazione REFERENCES per il tipo.To create a column on CLR user-defined type, REFERENCES permission is required on the type.

    Se type_schema_name non viene specificato, il Motore di database di SQL ServerSQL Server Database Engine riferimenti type_name nell'ordine seguente:If type_schema_name is not specified, the Motore di database di SQL ServerSQL Server Database Engine references type_name in the following order:

  • Tipo di dati di sistema di SQL ServerSQL Server.The SQL ServerSQL Server system data type.

  • Schema predefinito dell'utente corrente nel database corrente.The default schema of the current user in the current database.

  • Schema dbo nel database corrente.The dbo schema in the current database.

    Per le tabelle con ottimizzazione per la memoria, vedere tipi di dati supportati per OLTP In memoria per un elenco di tipi di sistema supportati.For memory-optimized tables, see Supported Data Types for In-Memory OLTP for a list of supported system types.

    precisioneprecision
    Precisione del tipo di dati specificato.Is the precision for the specified data type. Per ulteriori informazioni sui valori di precisione validi, vedere precisione, scala e lunghezza.For more information about valid precision values, see Precision, Scale, and Length.

    scalascale
    Scala per il tipo di dati specificato.Is the scale for the specified data type. Per ulteriori informazioni sui valori di scala validi, vedere precisione, scala e lunghezza.For more information about valid scale values, see Precision, Scale, and Length.

    Maxmax
    Si applica solo al varchar, nvarchar, e varbinary tipi di dati per l'archiviazione di 2 ^ 31 byte di tipo carattere e dati binari e 2 ^ 30 byte di dati 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
    Specifica che ogni istanza di xml del tipo di dati column_name può contenere più elementi di livello superiore.Specifies that each instance of the xml data type in column_name can contain multiple top-level elements. Si applica solo al contenuto di xml dati digitare e può essere specificato solo se xml_schema_collection viene anche specificato.CONTENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified. Se non specificato, CONTENT rappresenta il comportamento predefinito.If not specified, CONTENT is the default behavior.

    DOCUMENTDOCUMENT
    Specifica che ogni istanza di xml del tipo di dati column_name può contenere un solo elemento di primo livello.Specifies that each instance of the xml data type in column_name can contain only one top-level element. DOCUMENTO si applica solo al xml dati digitare e può essere specificato solo se xml_schema_collection viene anche specificato.DOCUMENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified.

    xml_schema_collectionxml_schema_collection
    Si applica solo al xml il tipo di dati per l'associazione con il tipo di una raccolta XML schema.Applies only to the xml data type for associating an XML schema collection with the type. Prima di digitare un xml colonna a uno schema, lo schema è necessario innanzitutto creare nel database utilizzando 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
    Specifica il valore assegnato alla colonna quando non viene specificato un valore in modo esplicito durante un inserimento.Specifies the value provided for the column when a value is not explicitly supplied during an insert. Le definizioni DEFAULT possono essere applicate a tutte le colonne ad eccezione di quelli definiti come timestamp, o quelli con la proprietà IDENTITY.DEFAULT definitions can be applied to any columns except those defined as timestamp, or those with the IDENTITY property. Se è specificato un valore predefinito per una colonna di tipo definito dall'utente, il tipo deve supportare una conversione implicita da constant_expression per il tipo definito dall'utente.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. Le definizioni DEFAULT vengono rimosse quando la tabella viene eliminata.DEFAULT definitions are removed when the table is dropped. È possibile usare come predefinito solo un valore costante, ad esempio una stringa di caratteri, una funzione scalare (una funzione di sistema, definita dall'utente o CLR) oppure un valore 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. Per garantire la compatibilità con le versioni precedenti di SQL ServerSQL Server, è possibile assegnare un nome di vincolo a una definizione DEFAULT.To maintain compatibility with earlier versions of SQL ServerSQL Server, a constraint name can be assigned to a DEFAULT.

    constant_expressionconstant_expression
    Costante, valore NULL o funzione di sistema utilizzata come valore predefinito della colonna.Is a constant, NULL, or a system function that is used as the default value for the column.

    memory_optimized_constant_expressionmemory_optimized_constant_expression
    Costante, valore NULL o funzione di sistema utilizzata come valore predefinito della colonna.Is a constant, NULL, or a system function that is supported in used as the default value for the column. Deve essere supportata nelle stored procedure compilate in modo nativo.Must be supported in natively compiled stored procedures. Per ulteriori informazioni sulle funzioni predefinite nelle stored procedure compilate in modo nativo, vedere funzionalità supportate per moduli T-SQL compilati in modo nativo.For more information about built-in functions in natively compiled stored procedures, see Supported Features for Natively Compiled T-SQL Modules.

    IDENTITYIDENTITY
    Indica che la nuova colonna è una colonna Identity.Indicates that the new column is an identity column. Quando si aggiunge una nuova riga alla tabella, Motore di databaseDatabase Engine assegna un valore univoco e incrementale alla colonna.When a new row is added to the table, the Motore di databaseDatabase Engine provides a unique, incremental value for the column. Le colonne Identity vengono in genere utilizzate in combinazione con vincoli PRIMARY KEY come identificatori di riga univoci per la tabella.Identity columns are typically used with PRIMARY KEY constraints to serve as the unique row identifier for the table. La proprietà IDENTITY può essere assegnata a tinyint, smallint, int, bigint, decimal(p,0), o numeric(p,0) colonne.The IDENTITY property can be assigned to tinyint, smallint, int, bigint, decimal(p,0), or numeric(p,0) columns. Ogni tabella può includere una sola colonna Identity.Only one identity column can be created per table. Non è consentito associare valori predefiniti e vincoli DEFAULT alle colonne Identity.Bound defaults and DEFAULT constraints cannot be used with an identity column. È necessario specificare sia il valore di inizializzazione, sia l'incremento oppure nessuno dei due.Both the seed and increment or neither must be specified. In questo secondo caso, il valore predefinito è (1,1).If neither is specified, the default is (1,1).

    In una tabella con ottimizzazione per la memoria, l'unico valore consentito sia per valore di inizializzazione e incremento è 1. (1,1) è il valore predefinito per valore di inizializzazione e incremento.In a memory-optimized table, the only allowed value for both seed and increment is 1; (1,1) is the default for seed and increment.

    valore di inizializzazioneseed
    Valore di inizializzazione utilizzato per la prima riga caricata nella tabella.Is the value used for the very first row loaded into the table.

    incrementoincrement
    Valore incrementale aggiunto al valore Identity della riga caricata in precedenza.Is the incremental value added to the identity value of the previous row loaded.

    NOT FOR REPLICATIONNOT FOR REPLICATION
    Nell'istruzione CREATE TABLE è possibile specificare la clausola NOT FOR REPLICATION per la proprietà IDENTITY, i vincoli FOREIGN KEY e i vincoli CHECK.In the CREATE TABLE statement, the NOT FOR REPLICATION clause can be specified for the IDENTITY property, FOREIGN KEY constraints, and CHECK constraints. Se si specifica questa clausola per la proprietà IDENTITY, i valori non vengono incrementati nelle colonne Identity per gli inserimenti eseguiti dagli agenti di replica.If this clause is specified for the IDENTITY property, values are not incremented in identity columns when replication agents perform inserts. Se per un vincolo si specifica questa clausola, il vincolo non viene imposto quando gli agenti di replica eseguono le operazioni di inserimento, aggiornamento o eliminazione.If this clause is specified for a constraint, the constraint is not enforced when replication agents perform insert, update, or delete operations.

    ATTRIBUTO GENERATED ALWAYS AS RIGA {START | TERMINARE} [NASCOSTO] [NON NULL]GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] [ NOT NULL ]
    Si applica a: SQL Server 2016SQL Server 2016 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and Database SQL di AzureAzure SQL Database.

    Specifica una colonna di tipo datetime2 specificato verrà utilizzata dal sistema per registrare l'ora di inizio per il quale un record è valido o l'ora di fine per il quale un record è valido.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 colonna deve essere definita come NOT NULL.The column must be defined as NOT NULL. Se si tenta di specificarli come NULL, il sistema genererà un errore.If you attempt to specify them as NULL, the system will throw an error. Se non si specifica in modo esplicito non NULL per una colonna di periodo, il sistema sarà la colonna definita come NOT NULL per impostazione predefinita.If you do not explicitly specify NOT NULL for a period column, the system will define the column as NOT NULL by default. Utilizzare questo argomento in combinazione con l'operazione PERIOD FOR SYSTEM_TIME e con SYSTEM_VERSIONING = ON argomenti per abilitare il controllo delle versioni di sistema in una tabella.Use this argument in conjunction with the PERIOD FOR SYSTEM_TIME and WITH SYSTEM_VERSIONING = ON arguments to enable system versioning on a table. Per altre informazioni, vedere Temporal Tables.For more information, see Temporal Tables.

    È possibile contrassegnare una o entrambe le colonne del periodo con HIDDEN flag per nascondere in modo implicito le colonne in modo che selezionare * FROM <table> non Restituisce un valore per tali colonne.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. Per impostazione predefinita, le colonne del periodo non vengono nascosti.By default, period columns are not hidden. Per poter essere usato, le colonne nascoste devono essere incluso in modo esplicito in tutte le query che fanno riferimento direttamente alla tabella temporale.In order to be used, hidden columns must be explicitly included in all queries that directly reference the temporal table. Per modificare il HIDDEN attributo per una colonna di periodo esistente, periodo necessario eliminarlo e ricrearlo con un flag nascosto diversi.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* ] )

Si applica a: SQL Server 2014SQL Server 2014 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and Database SQL di AzureAzure SQL Database.

Specifica per creare un indice nella 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 elencate e verrà ordinati 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.

INDICE index_name COLUMNSTORE clusterINDEX index_name CLUSTERED COLUMNSTORE

Si applica a: SQL Server 2014SQL Server 2014 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and Database SQL di AzureAzure SQL Database.

Specifica per archiviare l'intera tabella nel formato a colonne con un indice columnstore cluster.Specifies to store the entire table in columnar format with a clustered columnstore index. Questo include sempre tutte le colonne nella tabella.This always includes all columns in the table. I dati non è ordinati in ordine alfabetico o numerico poiché le righe sono organizzate per ottenere i vantaggi di compressione di columnstore.The data is not sorted in alphabetical or numeric order since the rows are organized to gain columnstore compression benefits.

INDICE index_name COLUMNSTORE NONCLUSTEREDINDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )

Si applica a: SQL Server 2014SQL Server 2014 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and Database SQL di AzureAzure SQL Database.

Specifica per creare un indice columnstore non cluster nella tabella.Specifies to create a nonclustered columnstore index on the table. La tabella sottostante può essere un heap rowstore o un indice cluster oppure può trattarsi di un indice columnstore cluster.The underlying table can be a rowstore heap or clustered index, or it can be a clustered columnstore index. In tutti i casi, la creazione di un indice columnstore non cluster in una tabella archivia una seconda copia dei dati per le colonne nell'indice.In all cases, creating a nonclustered columnstore index on a table stores a second copy of the data for the columns in the index.

L'indice columnstore non cluster archiviato e gestito come un indice columnstore cluster.The nonclustered columnstore index is stored and managed as a clustered columnstore index. Perché le colonne possono essere limitate ed esiste come un indice secondario in una tabella viene definito un indice columnstore non cluster.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)
Specifica lo schema di partizione che definisce i filegroup a cui verrà eseguito il mapping delle partizioni di un indice partizionato.Specifies the partition scheme that defines the filegroups onto which the partitions of a partitioned index will be mapped. Lo schema di partizione deve esistere all'interno del database per l'esecuzione di una 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 specifica la colonna in base alla quale verrà partizionato un indice partizionato.column_name specifies the column against which a partitioned index will be partitioned. Questa colonna deve corrispondere al tipo di dati, lunghezza e precisione dell'argomento della partizione di funzione che partition_scheme_name utilizza.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 non è limitato alle colonne nella definizione dell'indice.column_name is not restricted to the columns in the index definition. È possibile specificare qualsiasi colonna nella tabella di base, tranne quando si partiziona un indice univoco, column_name devono essere scelte tra quelle utilizzate come chiave univoca.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. Questa restrizione consente a Motore di databaseDatabase Engine di verificare l'univocità dei valori di chiave all'interno di una singola partizione.This restriction allows the Motore di databaseDatabase Engine to verify uniqueness of key values within a single partition only.

Nota

Quando si partiziona un indice cluster non univoco, per impostazione predefinita Motore di databaseDatabase Engine aggiunge la colonna di partizionamento all'elenco delle chiavi di indice cluster, se non è già presente.When you partition a non-unique, clustered index, the Motore di databaseDatabase Engine by default adds the partitioning column to the list of clustered index keys, if it is not already specified. Quando si partiziona un indice non cluster non univoco, Motore di databaseDatabase Engine aggiunge la colonna di partizionamento come colonna non chiave (inclusa) dell'indice, se non è già presente.When partitioning a non-unique, nonclustered index, the Motore di databaseDatabase Engine adds the partitioning column as a non-key (included) column of the index, if it is not already specified.

Se partition_scheme_name o filegroup non è specificato e la tabella è partizionata, l'indice viene posizionato nello stesso schema di partizione, utilizzando la stessa colonna di partizionamento della tabella sottostante.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

Non è possibile specificare uno schema di partizione per un indice XML.You cannot specify a partitioning scheme on an XML index. Se la tabella di base è partizionata, l'indice XML utilizzerà lo stesso schema di partizione della tabella.If the base table is partitioned, the XML index uses the same partition scheme as the table.

Per ulteriori informazioni sul partizionamento degli indici, tabelle e indici partizionati.For more information about partitioning indexes, Partitioned Tables and Indexes.

ON filegroup_nameON filegroup_name
Crea l'indice specificato nel filegroup specificato.Creates the specified index on the specified filegroup. Se non viene specificata una posizione e la tabella o la vista non è partizionata, l'indice utilizzerà lo stesso filegroup della tabella o della vista sottostante.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. Il filegroup deve essere già esistente.The filegroup must already exist.

ON "predefinito"ON "default"
Crea l'indice specificato nel filegroup predefinito.Creates the specified index on the default filegroup.

In questo contesto il termine default non rappresenta una parola chiave,The term default, in this context, is not a keyword. È un identificatore per il filegroup predefinito e deve essere delimitato, ad esempio ON "predefinito" oppure ON [predefinito].It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [default]. Se si specifica "default", l'opzione QUOTED_IDENTIFIER deve essere impostata su ON per la sessione corrente.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Si tratta dell'impostazione predefinita.This is the default setting. Per altre informazioni, vedere SET QUOTED_IDENTIFIER (Transact-SQL).For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

[FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL"}][ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]

Si applica a: SQL ServerSQL Server.Applies to: SQL ServerSQL Server.

Specifica la posizione dei dati FILESTREAM per la tabella quando viene creato un indice cluster.Specifies the placement of FILESTREAM data for the table when a clustered index is created. La clausola FILESTREAM_ON consente di spostare i dati FILESTREAM in uno schema di partizione o in un filegroup FILESTREAM diverso.The FILESTREAM_ON clause allows FILESTREAM data to be moved to a different FILESTREAM filegroup or partition scheme.

filestream_filegroup_name è il nome di un filegroup FILESTREAM.filestream_filegroup_name is the name of a FILESTREAM filegroup. Il filegroup deve avere un file definito per il filegroup utilizzando un CREATE DATABASE o ALTER DATABASE istruzione; in caso contrario, viene generato un errore.The filegroup must have one file defined for the filegroup by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

Se la tabella è partizionata, la clausola FILESTREAM_ON deve essere inclusa e deve specificare uno schema di partizione dei filegroup FILESTREAM che utilizzi la stessa funzione di partizione e le stesse colonne di partizione dello schema di partizione per la tabella.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. In caso contrario, viene generato un errore.Otherwise, an error is raised.

Se la tabella non è partizionata, la colonna FILESTREAM non può essere partizionata.If the table is not partitioned, the FILESTREAM column cannot be partitioned. I dati FILESTREAM per la tabella devono essere archiviati in un singolo filegroup specificato nella clausola FILESTREAM_ON.FILESTREAM data for the table must be stored in a single filegroup that is specified in the FILESTREAM_ON clause.

È possibile specificare FILESTREAM_ON NULL in un'istruzione CREATE INDEX se si sta creando un indice cluster e se nella tabella non è contenuta alcuna colonna 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.

Per altre informazioni, vedere FILESTREAM (SQL Server).For more information, see FILESTREAM (SQL Server).

ROWGUIDCOLROWGUIDCOL
Indica che la nuova colonna è una colonna GUID di riga.Indicates that the new column is a row GUID column. Un solo uniqueidentifier colonna per ogni tabella può essere definita come colonna ROWGUIDCOL.Only one uniqueidentifier column per table can be designated as the ROWGUIDCOL column. L'applicazione della proprietà ROWGUIDCOL consente di fare riferimento alla colonna utilizzando $ROWGUID.Applying the ROWGUIDCOL property enables the column to be referenced using $ROWGUID. La proprietà ROWGUIDCOL può essere assegnata solo a un uniqueidentifier colonna.The ROWGUIDCOL property can be assigned only to a uniqueidentifier column. Le colonne con tipo di dati definito dall'utente non possono essere designate con ROWGUIDCOL.User-defined data type columns cannot be designated with ROWGUIDCOL.

La proprietà ROWGUIDCOL non impone l'univocità dei valori archiviati nella colonnaThe ROWGUIDCOL property does not enforce uniqueness of the values stored in the column. e non genera automaticamente valori per le nuove righe inserite nella tabella.ROWGUIDCOL also does not automatically generate values for new rows inserted into the table. Per generare valori univoci per ogni colonna, utilizzare il NEWID o NEWSEQUENTIALID funzione su inserire istruzioni o utilizzare queste funzioni come il valore predefinito per il colonna.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.

CRITTOGRAFATO CONENCRYPTED WITH
Specifica le colonne di crittografia utilizzando il Always Encrypted funzionalità.Specifies encrypting columns by using the Always Encrypted feature.

COLUMN_ENCRYPTION_KEY = key_nameCOLUMN_ENCRYPTION_KEY = key_name
Specifica la chiave di crittografia di colonna.Specifies the column encryption key. Per ulteriori informazioni, vedere CREATE COLUMN ENCRYPTION KEY ( Transact-SQL ) .For more information, see CREATE COLUMN ENCRYPTION KEY (Transact-SQL).

ENCRYPTION_TYPE = {DETERMINISTICA | CASUALE}ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }
Lacrittografia deterministica usa un metodo che genera sempre lo stesso valore crittografato per qualsiasi valore di testo normale specificato.Deterministic encryption uses a method which always generates the same encrypted value for any given plain text value. Uso della crittografia deterministica consente la ricerca utilizzando il confronto di uguaglianza, raggruppamento e join di tabelle con join di uguaglianza in base ai valori crittografati, ma può anche consentire agli utenti non autorizzati di indovinare le informazioni sui valori crittografati esaminando i criteri in la colonna crittografata.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. Unione di due tabelle sulle colonne crittografate in modo deterministico è possibile solo se entrambe le colonne vengono crittografate tramite la stessa chiave di crittografia di colonna.Joining two tables on columns encrypted deterministically is only possible if both columns are encrypted using the same column encryption key. La crittografia deterministica deve usare regole di confronto a livello di colonna con un ordinamento binario2 per colonne di tipo carattere.Deterministic encryption must use a column collation with a binary2 sort order for character columns.

Lacrittografia casuale usa un metodo di crittografia dei dati meno prevedibile.Randomized encryption uses a method that encrypts data in a less predictable manner. La crittografia casuale è più sicura ma impedisce le ricerche di uguaglianza, raggruppamento e join su colonne crittografate.Randomized encryption is more secure, but prevents equality searches, grouping, and joining on encrypted columns. Le colonne con la crittografia casuale non possono essere indicizzate.Columns using randomized encryption cannot be indexed.

Per le colonne che saranno i parametri di ricerca o raggruppamento, ad esempio un numero di ID per enti pubblici, utilizzare la crittografia deterministica.Use deterministic encryption for columns that will be search parameters or grouping parameters, for example a government ID number. Usare la crittografia casuale, per i dati, ad esempio un numero di carta di credito, che non è raggruppati con altri record o usati per il join di tabelle e che non viene cercato per perché utilizzare altre colonne (ad esempio un numero di transazioni) per trovare la riga che contiene crittografata colonna di interesse.Use randomized encryption, for data such as a credit card number, which is not grouped with other records, or used to join tables, and which is not searched for because you use other columns (such as a transaction number) to find the row which contains the encrypted column of interest.

Le colonne devono essere di un tipo di dati validi.Columns must be of a qualifying data type.

ALGORITMOALGORITHM
Deve essere 'AEAD_AES_256_CBC_HMAC_SHA_256'.Must be 'AEAD_AES_256_CBC_HMAC_SHA_256'.

Per ulteriori informazioni, inclusi i vincoli di funzionalità, vedere Always Encrypted ( motore di Database ).For more information including feature constraints, see Always Encrypted (Database Engine).

Si applica a: SQL Server 2016SQL Server 2016 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017.

SPARSESPARSE
Indica che la colonna è di tipo sparse.Indicates that the column is a sparse column. L'archiviazione delle colonne di tipo sparse è ottimizzata per valori Null.The storage of sparse columns is optimized for null values. Non è possibile designare le colonne di tipo sparse come NOT NULL.Sparse columns cannot be designated as NOT NULL. Per ulteriori restrizioni e ulteriori informazioni sulle colonne di tipo sparse, vedere utilizzare le colonne di tipo Sparse.For additional restrictions and more information about sparse columns, see Use Sparse Columns.

MASCHERATI con (funzione = ' mask_function ')MASKED WITH ( FUNCTION = ' mask_function ')
Si applica a: SQL Server 2016SQL Server 2016 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017.

Specifica una maschera dati dinamica.Specifies a dynamic data mask. mask_function è il nome della funzione di maschera con i parametri appropriati.mask_function is the name of the masking function with the appropriate parameters. Sono disponibili seguenti le:Three functions are available:

Si applica a: SQL ServerSQL Server.Applies to: SQL ServerSQL Server.

Valido solo per varbinary (max) colonne.Valid only for varbinary(max) columns. Specifica l'archiviazione FILESTREAM per il varbinary (max) dati BLOB.Specifies FILESTREAM storage for the varbinary(max) BLOB data.

La tabella deve includere anche una colonna del uniqueidentifier tipo di dati che dispone dell'attributo ROWGUIDCOL.The table must also have a column of the uniqueidentifier data type that has the ROWGUIDCOL attribute. Questa colonna non deve consentire valori Null e deve avere un vincolo a colonna singola UNIQUE o PRIMARY KEY.This column must not allow null values and must have either a UNIQUE or PRIMARY KEY single-column constraint. Il valore GUID per la colonna deve essere specificato da un'applicazione al momento dell'inserimento dei dati o da un vincolo DEFAULT che utilizza la funzione 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.

Non è possibile eliminare la colonna ROWGUIDCOL, né modificare i vincoli correlati quando per la tabella è stata definita una colonna FILESTREAM.The ROWGUIDCOL column cannot be dropped and the related constraints cannot be changed while there is a FILESTREAM column defined for the table. La colonna ROWGUIDCOL può essere eliminata solo dopo l'eliminazione dell'ultima colonna FILESTREAM.The ROWGUIDCOL column can be dropped only after the last FILESTREAM column is dropped.

Quando l'attributo di archiviazione FILESTREAM viene specificato per una colonna, tutti i valori per quella colonna vengono archiviati in un contenitore di dati FILESTREAM nel file system.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_nameCOLLATE collation_name
Specifica le regole di confronto per la colonna.Specifies the collation for the column. È possibile usare nomi di regole di confronto di Windows o SQL.Collation name can be either a Windows collation name or an SQL collation name. collation_name è applicabile solo alle colonne di char, varchar, testo, nchar, nvarchar, e ntext tipi di dati.collation_name is applicable only for columns of the char, varchar, text, nchar, nvarchar, and ntext data types. Se non specificato, alla colonna vengono assegnate le regole di confronto del tipo di dati definito dall'utente, se la colonna presenta questo tipo di dati, oppure le regole di confronto predefinite del database.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.

Per ulteriori informazioni sui nomi delle regole di confronto Windows e SQL, vedere windows_collation_name e nome regole di confronto SQL.For more information about the Windows and SQL collation names, see Windows Collation Name and SQL Collation Name.

Per ulteriori informazioni sulla clausola COLLATE, vedere COLLATE ( Transact-SQL ) .For more information about the COLLATE clause, see COLLATE (Transact-SQL).

CONSTRAINTCONSTRAINT
Parola chiave facoltativa che indica l'inizio di una definizione di vincolo 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_nameconstraint_name
Nome di un vincolo.Is the name of a constraint. I nomi di vincolo devono essere univoci nell'ambito dello schema a cui appartiene la tabella.Constraint names must be unique within the schema to which the table belongs.

NULL | NOT NULLNULL | NOT NULL
Indica se i valori NULL sono consentiti nella colonna.Determine whether null values are allowed in the column. L'opzione NULL non è esattamente un vincolo, ma può essere specificata allo stesso modo di NOT NULL.NULL is not strictly a constraint but can be specified just like NOT NULL. È possibile specificare NOT NULL per le colonne calcolate solo se è specificato PERSISTED.NOT NULL can be specified for computed columns only if PERSISTED is also specified.

PRIMARY KEYPRIMARY KEY
Vincolo che impone l'integrità di entità per una o più colonne specificate tramite un indice univoco.Is a constraint that enforces entity integrity for a specified column or columns through a unique index. È possibile creare un solo vincolo PRIMARY KEY per ogni tabella.Only one PRIMARY KEY constraint can be created per table.

UNIQUEUNIQUE
Vincolo che impone l'integrità di entità per una o più colonne specificate tramite un indice univoco.Is a constraint that provides entity integrity for a specified column or columns through a unique index. Una tabella può includere più vincoli UNIQUE.A table can have multiple UNIQUE constraints.

CLUSTERED | NONCLUSTEREDCLUSTERED | NONCLUSTERED
Definisce la creazione di un indice cluster o non cluster per il vincolo PRIMARY KEY o UNIQUE.Indicate that a clustered or a nonclustered index is created for the PRIMARY KEY or UNIQUE constraint. Il valore predefinito per i vincoli PRIMARY KEY è CLUSTERED, mentre per i vincoli UNIQUE è NONCLUSTERED.PRIMARY KEY constraints default to CLUSTERED, and UNIQUE constraints default to NONCLUSTERED.

In un'istruzione CREATE TABLE è possibile specificare CLUSTERED per un solo vincolo.In a CREATE TABLE statement, CLUSTERED can be specified for only one constraint. Se si specifica CLUSTERED per un vincolo UNIQUE e si specifica anche un vincolo PRIMARY KEY, il valore predefinito di quest'ultimo è NONCLUSTERED.If CLUSTERED is specified for a UNIQUE constraint and a PRIMARY KEY constraint is also specified, the PRIMARY KEY defaults to NONCLUSTERED.

Di seguito viene illustrato come usare NONCLUSTERED in una tabella basata su disco:The following shows how to use NONCLUSTERED in a disk-based table:

CREATE TABLE t1 ( c1 int, INDEX ix_1 NONCLUSTERED (c1))   
CREATE TABLE t2( c1 int INDEX ix_1 NONCLUSTERED (c1))   
CREATE TABLE t3( c1 int, c2 int INDEX ix_1 NONCLUSTERED)   
CREATE TABLE t4( c1 int, c2 int, INDEX ix_1 NONCLUSTERED (c1,c2))  

FOREIGN KEY REFERENCESFOREIGN KEY REFERENCES
Vincolo che impone l'integrità referenziale dei dati di una o più colonne.Is a constraint that provides referential integrity for the data in the column or columns. È necessario che ogni valore delle colonne sia incluso nelle colonne di riferimento corrispondenti della tabella di riferimento.FOREIGN KEY constraints require that each value in the column exists in the corresponding referenced column or columns in the referenced table. È possibile fare riferimento a vincoli FOREIGN KEY solo nelle colonne che nella tabella con riferimenti corrispondono a vincoli PRIMARY KEY o UNIQUE e nelle colonne a cui viene fatto riferimento in un indice univoco nella tabella di riferimento.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. È necessario contrassegnare come PERSISTED anche le chiavi esterne nelle colonne calcolate.Foreign keys on computed columns must also be marked PERSISTED.

[ schema_name.] referenced_table_name][ schema_name.] referenced_table_name]
Nome della tabella a cui fa riferimento il vincolo FOREIGN KEY e dello schema a cui appartiene.Is the name of the table referenced by the FOREIGN KEY constraint, and the schema to which it belongs.

( ref_column [ ,... n ] )( ref_column [ ,... n ] )
Colonna o elenco di colonne della tabella a cui fa riferimento il vincolo FOREIGN KEY.Is a column, or list of columns, from the table referenced by the FOREIGN KEY constraint.

ELIMINAZIONE { ALCUNA AZIONE | CASCADE | SET NULL | IMPOSTAZIONE DEL VALORE PREDEFINITO}ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
Specifica quale azione eseguire sulle righe nella tabella creata, se tali righe includono una relazione referenziale e se la riga a cui viene fatto riferimento viene eliminata dalla tabella padre.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. Il valore predefinito è NO ACTION.The default is NO ACTION.

NO ACTIONNO ACTION
Motore di databaseDatabase Engine genera un errore e viene eseguito il rollback dell'azione di eliminazione della riga nella tabella padre.The Motore di databaseDatabase Engine raises an error and the delete action on the row in the parent table is rolled back.

CASCADECASCADE
Le righe corrispondenti vengono eliminate dalla tabella di riferimento se la riga viene eliminata dalla tabella padre.Corresponding rows are deleted from the referencing table if that row is deleted from the parent table.

SET NULLSET NULL
Tutti i valori che compongono la chiave esterna vengono impostati su NULL se viene eliminata la riga corrispondente nella tabella padre.All the values that make up the foreign key are set to NULL if the corresponding row in the parent table is deleted. Per l'esecuzione di questo vincolo, è necessario che le colonne chiave esterna ammettano valori Null.For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULTSET DEFAULT
Tutti i valori che compongono la chiave esterna vengono impostati sui rispettivi valori predefiniti se viene eliminata la riga corrispondente nella tabella padre.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. Per l'esecuzione di questo vincolo, è necessario che per tutte le colonne chiave esterna siano definiti valori predefiniti.For this constraint to execute, all foreign key columns must have default definitions. Se una colonna ammette valori Null e non viene impostato un valore predefinito esplicito, NULL diventa il valore predefinito implicito della colonna.If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

Non specificare CASCADE se la tabella verrà inclusa in una pubblicazione di tipo merge che utilizza record logici.Do not specify CASCADE if the table will be included in a merge publication that uses logical records. Per altre informazioni sui record logici, vedere Raggruppare modifiche alle righe correlate con record logici.For more information about logical records, see Group Changes to Related Rows with Logical Records.

Non è possibile specificare ON DELETE CASCADE se nella tabella è già presente un trigger INSTEAD OF per ON DELETE.ON DELETE CASCADE cannot be defined if an INSTEAD OF trigger ON DELETE already exists on the table.

Ad esempio, nel AdventureWorks2012AdventureWorks2012 database, il ProductVendor tabella ha una relazione referenziale con la fornitore tabella.For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table. Il ProductVendor riferimenti di chiave esterna di BusinessEntityID chiave primaria.The ProductVendor.BusinessEntityID foreign key references the Vendor.BusinessEntityID primary key.

Se viene eseguita un'istruzione DELETE in una riga di fornitore tabella e un'azione ON DELETE CASCADE viene specificata per ProductVendor, Motore di databaseDatabase Engine controlli per uno o più dipendenti le righe del ProductVendor tabella.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 Motore di databaseDatabase Engine checks for one or more dependent rows in the ProductVendor table. Le eventuali righe dipendenti nella ProductVendor tabella vengono eliminate e anche la riga a cui fa riferimento il fornitore tabella.If any exist, the dependent rows in the ProductVendor table are deleted, and also the row referenced in the Vendor table.

Al contrario, se si specifica NO ACTION, il Motore di databaseDatabase Engine genera un errore ed eseguire il rollback dell'azione di eliminazione fornitore se esiste almeno una riga nel ProductVendor tabella cui fa riferimento.Conversely, if NO ACTION is specified, the Motore di databaseDatabase 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.

AGGIORNAMENTO { ALCUNA AZIONE | CASCADE | SET NULL | IMPOSTAZIONE DEL VALORE PREDEFINITO}ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
Specifica l'azione eseguita nelle righe della tabella modificata se tali righe includono una relazione referenziale e la riga a cui viene fatto riferimento è stata aggiornata nella tabella padre.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. Il valore predefinito è NO ACTION.The default is NO ACTION.

NO ACTIONNO ACTION
Motore di databaseDatabase Engine genera un errore e viene eseguito il rollback dell'azione di aggiornamento della riga nella tabella padre.The Motore di databaseDatabase Engine raises an error, and the update action on the row in the parent table is rolled back.

CASCADECASCADE
Le righe corrispondenti vengono aggiornate nella tabella di riferimento quando la riga viene aggiornata nella tabella padre.Corresponding rows are updated in the referencing table when that row is updated in the parent table.

SET NULLSET NULL
Tutti i valori che costituiscono la chiave esterna vengono impostati su NULL quando viene aggiornata la riga corrispondente nella tabella padre.All the values that make up the foreign key are set to NULL when the corresponding row in the parent table is updated. Per l'esecuzione di questo vincolo, è necessario che le colonne chiave esterna ammettano valori Null.For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULTSET DEFAULT
Tutti i valori che costituiscono la chiave esterna vengono impostati sui rispettivi valori predefiniti quando viene aggiornata la riga corrispondente nella tabella padre.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. Per l'esecuzione di questo vincolo, è necessario che per tutte le colonne chiave esterna siano definiti valori predefiniti.For this constraint to execute, all foreign key columns must have default definitions. Se una colonna ammette valori Null e non viene impostato un valore predefinito esplicito, NULL diventa il valore predefinito implicito della colonna.If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

Non specificare CASCADE se la tabella verrà inclusa in una pubblicazione di tipo merge che utilizza record logici.Do not specify CASCADE if the table will be included in a merge publication that uses logical records. Per altre informazioni sui record logici, vedere Raggruppare modifiche alle righe correlate con record logici.For more information about logical records, see Group Changes to Related Rows with Logical Records.

Non è possibile specificare ON UPDATE CASCADE, SET NULL o SET DEFAULT se nella tabella che viene modificata esiste già un trigger INSTEAD OF per ON UPDATE.ON UPDATE CASCADE, SET NULL, or SET DEFAULT cannot be defined if an INSTEAD OF trigger ON UPDATE already exists on the table that is being altered.

Ad esempio, nel AdventureWorks2012AdventureWorks2012 database, il ProductVendor tabella ha una relazione referenziale con la fornitore tabella: businessEntity riferimenti di chiave esterna di BusinessEntityID chiave primaria.For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table: ProductVendor.BusinessEntity foreign key references the Vendor.BusinessEntityID primary key.

Se viene eseguita un'istruzione UPDATE in una riga di fornitore tabella e un'azione ON UPDATE CASCADE viene specificata per ProductVendor, Motore di databaseDatabase Engine controlli per uno o più dipendenti le righe del ProductVendor tabella.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 Motore di databaseDatabase Engine checks for one or more dependent rows in the ProductVendor table. Le eventuali righe dipendenti nella ProductVendor tabella vengono aggiornati e anche la riga a cui fa riferimento il fornitore tabella.If any exist, the dependent rows in the ProductVendor table are updated, and also the row referenced in the Vendor table.

Al contrario, se si specifica NO ACTION, il Motore di databaseDatabase Engine genera un errore ed eseguire il rollback dell'azione di aggiornamento fornitore se esiste almeno una riga nel ProductVendor tabella cui fa riferimento.Conversely, if NO ACTION is specified, the Motore di databaseDatabase 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
Vincolo che impone l'integrità di dominio tramite la limitazione dei valori che è possibile inserire in una o più colonne.Is a constraint that enforces domain integrity by limiting the possible values that can be entered into a column or columns. È necessario contrassegnare come PERSISTED anche i vincoli CHECK nelle colonne calcolate.CHECK constraints on computed columns must also be marked PERSISTED.

Logical_Expressionlogical_expression
Espressione logica che restituisce TRUE o FALSE.Is a logical expression that returns TRUE or FALSE. L'espressione non può includere tipi di dati alias.Alias data types cannot be part of the expression.

colonnacolumn
Colonna o elenco di colonne, indicate tra parentesi, utilizzate nei vincoli di tabella per indicare le colonne specificate nella definizione del vincolo.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 ]
Specifica l'ordinamento della colonna o delle colonne che fanno parte dei vincoli di tabella.Specifies the order in which the column or columns participating in table constraints are sorted. Il valore predefinito è ASC.The default is ASC.

partition_scheme_namepartition_scheme_name
Nome dello schema di partizione che definisce i filegroup a cui verrà eseguito il mapping delle partizioni di una tabella partizionata.Is the name of the partition scheme that defines the filegroups onto which the partitions of a partitioned table will be mapped. Lo schema di partizione deve essere presente nel database.The partition scheme must exist within the database.

[ partition_column_name.[ partition_column_name. ]]
Specifica la colonna in base alla quale verrà partizionata una tabella partizionata.Specifies the column against which a partitioned table will be partitioned. La colonna deve corrispondere a quello specificato nella partizione di funzione che partition_scheme_name utilizza in termini di tipo di dati, lunghezza e precisione.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 colonna calcolata utilizzata in una funzione di partizione deve essere contrassegnata in modo esplicito come PERSISTED.A computed columns that participates in a partition function must be explicitly marked PERSISTED.

Importante

Si consiglia di specificare NOT NULL sulla colonna di partizionamento di tabelle partizionate oppure di tabelle non partizionate che rappresentano origini o destinazioni di operazioni 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. In questo modo, i vincoli CHECK su colonne di partizionamento non devono verificare la presenza di valori Null.Doing this makes sure that any CHECK constraints on partitioning columns do not have to check for null values.

CON valore FILLFACTOR = fattore di riempimentoWITH FILLFACTOR =fillfactor
Specifica la percentuale di riempimento impostata da Motore di databaseDatabase Engine per ogni pagina di indice utilizzata per archiviare i dati dell'indice.Specifies how full the Motore di databaseDatabase Engine should make each index page that is used to store the index data. Specificato dall'utente fillfactor valori possono essere compresi tra 1 e 100.User-specified fillfactor values can be from 1 through 100. Se non viene specificato alcun valore, il valore predefinito è 0.If a value is not specified, the default is 0. I valori 0 e 100 relativi al fattore di riempimento sono equivalenti.Fill factor values 0 and 100 are the same in all respects.

Importante

Documentazione con FILLFACTOR = fillfactor come l'unica opzione di indice che si applica ai vincoli PRIMARY KEY o UNIQUE viene mantenuto per compatibilità con le versioni precedenti, ma non sarà più documentata in futuro in questo modo rilascia.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.

nome_set_colonne XML COLUMN_SET FOR ALL_SPARSE_COLUMNS.column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
Nome del set di colonne.Is the name of the column set. Un set di colonne è una rappresentazione XML non tipizzata che combina tutte le colonne di tipo sparse di una tabella in un output strutturato.A column set is an untyped XML representation that combines all of the sparse columns of a table into a structured output. Per altre informazioni sui set di colonne, vedere Utilizzare set di colonne.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 )

Si applica a: SQL Server 2016SQL Server 2016 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and Database SQL di AzureAzure SQL Database.

Specifica i nomi delle colonne che verrà utilizzata dal sistema per registrare il periodo di validità per il quale un record.Specifies the names of the columns that the system will use to record the period for which a record is valid. Utilizzare questo argomento in combinazione con la generato sempre come riga {START | FINE} e con SYSTEM_VERSIONING = ON argomenti per abilitare il controllo delle versioni di sistema in una tabella.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. Per altre informazioni, vedere Temporal Tables.For more information, see Temporal Tables.

COMPRESSION_DELAYCOMPRESSION_DELAY

Si applica a: SQL Server 2016SQL Server 2016 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and Database SQL di AzureAzure SQL Database.

Per un con ottimizzazione della memoria, ritardo specifica il numero minimo di minuti che deve rimanere una riga nella tabella, invariata, prima che sia idoneo per la compressione in corrispondenza dell'indice columnstore.For a memory-optimized, delay specifies the minimum number of minutes a row must remain in the table, unchanged, before it is eligible for compression into the columnstore index. SQL Server consente di selezionare le righe specifiche da comprimere in base all'ultima ora di aggiornamento.SQL Server selects specific rows to compress according to their last update time. Ad esempio, se le righe modificano frequentemente durante un periodo di due ore di tempo, è possibile impostare COMPRESSION_DELAY = 120 minuti per verificare gli aggiornamenti vengono completati prima che SQL Server consente di comprimere la riga.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.

Per una tabella basata su disco, ritardo specifica il numero minimo di minuti che un rowgroup delta in stato di chiusura deve rimanere in rowgroup delta prima di SQL Server può ridurre in rowgroup compressi.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 Server can compress it into the compressed rowgroup. Poiché le tabelle basate su disco non tenere traccia delle insert e update volte su singole righe, SQL Server si applica il ritardo in rowgroup delta nello stato CLOSED.Since disk-based tables don't track insert and update times on individual rows, SQL Server applies the delay to delta rowgroups in the CLOSED state.

Il valore predefinito è 0 minuti.The default is 0 minutes.

Per indicazioni su quando usare COMPRESSION_DELAY, vedere Introduzione a Columnstore per analitica operativa in tempo realeFor recommendations on when to use COMPRESSION_DELAY, please see Get started with Columnstore for real time operational analytics

<table_option >:: = specifica uno o più opzioni di tabella.< table_option> ::= Specifies one or more table options.

DATA_COMPRESSIONDATA_COMPRESSION
Specifica l'opzione di compressione dei dati per la tabella, il numero di partizione o l'intervallo di partizioni specificato.Specifies the data compression option for the specified table, partition number, or range of partitions. Sono disponibili le opzioni seguenti:The options are as follows:

NONENONE
La tabella o le partizioni specificate non vengono compresse.Table or specified partitions are not compressed.

ROWROW
La tabella o le partizioni specificate vengono compresse utilizzando la compressione di riga.Table or specified partitions are compressed by using row compression.

PAGEPAGE
La tabella o le partizioni specificate vengono compresse utilizzando la compressione di pagina.Table or specified partitions are compressed by using page compression.

COLUMNSTORECOLUMNSTORE

Si applica a: SQL Server 2016SQL Server 2016 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and Database SQL di AzureAzure SQL Database.

Si applica solo agli indici columnstore, inclusi gli indici columnstore cluster e quelli non cluster.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE specifica questa opzione per comprimere con la maggior parte dei compressione columnstore ad alte prestazioni.COLUMNSTORE specifies to compress with the most performant columnstore compression. Si tratta in genere.This is the typical choice.

COLUMNSTORE_ARCHIVECOLUMNSTORE_ARCHIVE

Si applica a: SQL Server 2016SQL Server 2016 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and Database SQL di AzureAzure SQL Database.

Si applica solo agli indici columnstore, inclusi gli indici columnstore cluster e quelli non cluster.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE_ARCHIVE comprimerà ulteriormente la tabella o la partizione a una dimensione inferiore.COLUMNSTORE_ARCHIVE will further compress the table or partition to a smaller size. Può essere utilizzata per l'archiviazione o in altre situazioni in cui sono richieste dimensioni di archiviazione inferiori ed è possibile concedere più tempo per l'archiviazione e il recupero.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.

Per ulteriori informazioni sulla compressione, vedere la compressione dei dati.For more information about compression, see Data Compression.

PARTIZIONI ( { <partition_number_expression> | [ ,... n ] )ON PARTITIONS ( { <partition_number_expression> | [ ,...n ] )
Specifica le partizioni alle quali si applica l'impostazione DATA_COMPRESSION.Specifies the partitions to which the DATA_COMPRESSION setting applies. Se la tabella non è partizionata, l'argomento ON PARTITIONS genererà un errore.If the table is not partitioned, the ON PARTITIONS argument will generate an error. Se la clausola ON PARTITIONS non viene specificata, l'opzione DATA_COMPRESSION verrà applicata a tutte le partizioni di una tabella partizionata.If the ON PARTITIONS clause is not provided, the DATA_COMPRESSION option will apply to all partitions of a partitioned table.

partition_number_expression possono essere specificati nei modi seguenti:partition_number_expression can be specified in the following ways:

  • Specificare il numero di una partizione, ad esempio ON PARTITIONS (2).Provide the partition number of a partition, for example: ON PARTITIONS (2).

  • Fornire i numeri di partizione per più partizioni singole separati da virgole, ad esempio ON PARTITIONS (1, 5).Provide the partition numbers for several individual partitions separated by commas, for example: ON PARTITIONS (1, 5).

  • Specificare sia intervalli, sia singole partizioni, ad esempio ON PARTITIONS (2, 4, 6 TO 8).Provide both ranges and individual partitions, for example: ON PARTITIONS (2, 4, 6 TO 8)

    <range>possono essere specificati come numeri di partizione separati dalla parola TO, ad esempio: ON PARTITIONS (6 TO 8).<range> can be specified as partition numbers separated by the word TO, for example: ON PARTITIONS (6 TO 8).

    Per impostare tipi diversi di compressione dei dati per partizioni diverse, specificare più volte l'opzione DATA_COMPRESSION, ad esempio: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> ::=
Specifica una o più opzioni per l'indice.Specifies one or more index options. Per una descrizione completa di queste opzioni, vedere CREATE INDEX ( Transact-SQL ) .For a complete description of these options, see CREATE INDEX (Transact-SQL).

PAD_INDEX = {ON | OFF }PAD_INDEX = { ON | OFF }
Se l'opzione è impostata su ON, la percentuale di spazio disponibile specificata da FILLFACTOR viene applicata alle pagine di livello intermedio dell'indice.When ON, the percentage of free space specified by FILLFACTOR is applied to the intermediate level pages of the index. Se si specifica OFF o se non si specifica un valore FILLFACTOR, le pagine di livello intermedio vengono riempite quasi fino alla capacità massima, lasciando spazio sufficiente per almeno una riga delle dimensioni massime consentite per l'indice, considerando il set di chiavi nelle pagine intermedie.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. Il valore predefinito è OFF.The default is OFF.

Fattore di riempimento = fattore di riempimentoFILLFACTOR =fillfactor
Specifica una percentuale indicante il livello di riempimento del livello foglia di ogni pagina di indice applicato dal Motore di databaseDatabase Engine durante la creazione o la modifica dell'indice.Specifies a percentage that indicates how full the Motore di databaseDatabase Engine should make the leaf level of each index page during index creation or alteration. fattore di riempimento deve essere un valore intero compreso tra 1 e 100.fillfactor must be an integer value from 1 to 100. Il valore predefinito è 0.The default is 0. I valori 0 e 100 relativi al fattore di riempimento sono equivalenti.Fill factor values 0 and 100 are the same in all respects.

IGNORE_DUP_KEY = {ON | OFF }IGNORE_DUP_KEY = { ON | OFF }
Specifica l'errore restituito quando un'operazione di inserimento tenta di inserire valori di chiave duplicati in un indice univoco.Specifies the error response when an insert operation attempts to insert duplicate key values into a unique index. L'opzione IGNORE_DUP_KEY viene applicata solo alle operazioni di inserimento eseguite dopo la creazione o la ricompilazione dell'indice.The IGNORE_DUP_KEY option applies only to insert operations after the index is created or rebuilt. L'opzione non ha alcun effetto quando si esegue CREATE INDEX, ALTER INDEX, o aggiornamento.The option has no effect when executing CREATE INDEX, ALTER INDEX, or UPDATE. Il valore predefinito è OFF.The default is OFF.

ONON
Viene visualizzato un messaggio di avviso quando i valori di chiave duplicati vengono inseriti in un indice univoco.A warning message will occur when duplicate key values are inserted into a unique index. Avranno esito negativo solo le righe che violano il vincolo di unicità.Only the rows violating the uniqueness constraint will fail.

OFFOFF
Viene visualizzato un messaggio di errore quando i valori di chiave duplicati vengono inseriti in un indice univoco.An error message will occur when duplicate key values are inserted into a unique index. Viene eseguito il rollback dell'intera operazione INSERT.The entire INSERT operation will be rolled back.

L'opzione IGNORE_DUP_KEY non può essere impostata su ON per gli indici creati in una vista, negli indici non univoci, negli indici XML, spaziali e filtrati.IGNORE_DUP_KEY cannot be set to ON for indexes created on a view, non-unique indexes, XML indexes, spatial indexes, and filtered indexes.

Per visualizzare IGNORE_DUP_KEY, utilizzare Sys. Indexes.To view IGNORE_DUP_KEY, use sys.indexes.

Per quanto riguarda la sintassi compatibile con le versioni precedenti, WITH IGNORE_DUP_KEY equivale 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 }
Se si specifica ON, le statistiche dell'indice non aggiornate non vengono ricalcolate automaticamente.When ON, out-of-date index statistics are not automatically recomputed. Se si specifica OFF, viene abilitato l'aggiornamento automatico delle statistiche.When OFF, automatic statistics updating are enabled. Il valore predefinito è OFF.The default is OFF.

ALLOW_ROW_LOCKS = { ON | OFF}ALLOW_ROW_LOCKS = { ON | OFF }
Se si specifica ON, sono consentiti blocchi di riga per l'accesso all'indice.When ON, row locks are allowed when you access the index. Il Motore di databaseDatabase Engine determina quando utilizzare blocchi di riga.The Motore di databaseDatabase Engine determines when row locks are used. Se si specifica OFF, i blocchi a livello di riga non vengono utilizzati.When OFF, row locks are not used. Il valore predefinito è ON.The default is ON.

ALLOW_PAGE_LOCKS = { ON | OFF}ALLOW_PAGE_LOCKS = { ON | OFF }
Se si specifica ON, sono consentiti blocchi di pagina per l'accesso all'indice.When ON, page locks are allowed when you access the index. Il Motore di databaseDatabase Engine determina quando utilizzare blocchi a livello di pagina.The Motore di databaseDatabase Engine determines when page locks are used. Se si specifica OFF, i blocchi a livello di pagina non vengono utilizzati.When OFF, page locks are not used. Il valore predefinito è ON.The default is ON.

FILETABLE_DIRECTORY = directory_nameFILETABLE_DIRECTORY = directory_name

Si applica a: SQL Server 2012SQL Server 2012 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

Specifica un nome di directory FileTable compatibile con Windows.Specifies the windows-compatible FileTable directory name. Questo nome deve essere univoco tra tutti i nomi di directory FileTable nel database.This name should be unique among all the FileTable directory names in the database. Il confronto di univocità non supporta la distinzione tra maiuscole e minuscole, indipendentemente dalle impostazioni delle regole di confronto.Uniqueness comparison is case-insensitive, regardless of collation settings. Se questo valore non è specificato, viene utilizzato il nome della tabella FileTable.If this value is not specified, the name of the filetable is used.

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

Si applica a: SQL Server 2012SQL Server 2012 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

Specifica il nome delle regole di confronto da applicare alla colonna Name della tabella FileTable.Specifies the name of the collation to be applied to the Name column in the FileTable. Nelle regole di confronto specificate non deve essere applicata la distinzione tra maiuscole e minuscole ai fini della conformità con la semantica di denominazione dei file di Windows.The collation must be case-insensitive to comply with Windows file naming semantics. Se questo valore non è specificato, vengono utilizzate le regole di confronto predefinite del database.If this value is not specified, the database default collation is used. Se nelle regole di confronto predefinite del database viene applicata la distinzione tra maiuscole e minuscole, viene generato un errore e l'operazione CREATE TABLE non riesce.If the database default collation is case-sensitive, an error is raised and the CREATE TABLE operation fails.

collation_namecollation_name
Nome delle regole di confronto senza distinzione tra maiuscole e minuscole.The name of a case-insensitive collation.

database_defaultdatabase_default
Viene specificato che è necessario usare le regole di confronto predefinite per il database.Specifies that the default collation for the database should be used. Nelle regole di confronto non deve essere applicata la distinzione tra maiuscole e minuscole.This collation must be case-insensitive.

FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_nameFILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name

Si applica a: SQL Server 2012SQL Server 2012 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

Viene specificato il nome da usare per il vincolo di chiave primaria che viene creato automaticamente nella tabella FileTable.Specifies the name to be used for the primary key constraint that is automatically created on the FileTable. Se questo valore non è specificato, tramite il sistema viene generato un nome per il vincolo.If this value is not specified, the system generates a name for the constraint.

FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_nameFILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name

Si applica a: SQL Server 2012SQL Server 2012 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

Specifica il nome da utilizzare per il vincolo univoco che viene creato automaticamente sul stream_id colonna nella tabella FileTable.Specifies the name to be used for the unique constraint that is automatically created on the stream_id column in the FileTable. Se questo valore non è specificato, tramite il sistema viene generato un nome per il vincolo.If this value is not specified, the system generates a name for the constraint.

FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_nameFILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name

Si applica a: SQL Server 2012SQL Server 2012 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

Specifica il nome da utilizzare per il vincolo univoco che viene creato automaticamente sul parent_path_locator e nome colonne nella tabella FileTable.Specifies the name to be used for the unique constraint that is automatically created on the parent_path_locator and name columns in the FileTable. Se questo valore non è specificato, tramite il sistema viene generato un nome per il vincolo.If this value is not specified, the system generates a name for the constraint.

SYSTEM_VERSIONING = ON [(HISTORY_TABLE = schema_name .SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name . history_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF}])]history_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]

Si applica a: SQL Server 2016SQL Server 2016 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and Database SQL di AzureAzure SQL Database.

Consente il controllo delle versioni di sistema della tabella se vengono soddisfatti i requisiti per i vincoli di chiave primaria, il tipo di dati e il vincolo di ammissione di valori null.Enables system versioning of the table if the datatype, nullability constraint, and primary key constraint requirements are met. Se il HISTORY_TABLE argomento non viene utilizzato il sistema genera una nuova tabella di cronologia corrispondente lo schema della tabella nello stesso filegroup della tabella corrente, creare un collegamento tra le due tabelle corrente e consente al sistema di registrare la cronologia di ogni record nella tabella corrente nella tabella di cronologia.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. Il nome di questa tabella di cronologia sarà MSSQL_TemporalHistoryFor<primary_table_object_id>.The name of this history table will be MSSQL_TemporalHistoryFor<primary_table_object_id>. Per impostazione predefinita, la tabella di cronologia è PAGE compresso.By default, the history table is PAGE compressed. Se l'argomento HISTORY_TABLE viene utilizzato per creare un collegamento a e utilizzare una tabella di cronologia esistente, viene creato il collegamento tra la tabella corrente e la tabella specificata.If the HISTORY_TABLE argument is used to create a link to and use an existing history table, the link is created between the current table and the specified table. Se la tabella corrente è partizionata, la tabella di cronologia viene creata nel filegroup predefinito perché la configurazione del partizionamento non viene replicata automaticamente dalla tabella corrente nella tabella di cronologia.If current table is partitioned, the history table is created on default file group because partitioning configuration is not replicated automatically from the current table to the history table. Se durante la creazione della tabella di cronologia viene specificato il nome di una tabella di cronologia, è necessario specificare il nome tabella e il nome schema.If the name of a history table is specified during history table creation, you must specify the schema and table name. Quando si crea un collegamento a una tabella di cronologia esistente, è possibile scegliere di eseguire una verifica della coerenza dei dati.When creating a link to an existing history table, you can choose to perform a data consistency check. La coerenza dei dati garantisce che i record esistenti non si sovrappongano.This data consistency check ensures that existing records do not overlap. L'impostazione predefinita prevede l'esecuzione della verifica della coerenza dei dati.Performing the data consistency check is the default. Utilizzare questo argomento in combinazione con l'operazione PERIOD FOR SYSTEM_TIME e generato sempre AS riga {START | Argomenti di fine} per abilitare il controllo delle versioni di sistema in una tabella.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. Per altre informazioni, vedere Temporal Tables.For more information, see Temporal Tables.

REMOTE_DATA_ARCHIVE = {ON [( table_stretch_options [,... n])] | OFF (MIGRATION_STATE = IN PAUSA)}REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [,...n] ) ] | OFF ( MIGRATION_STATE = PAUSED ) }

Si applica a: SQL Server 2016SQL Server 2016 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017.

Crea la nuova tabella con estensione Database abilitata o disabilitata.Creates the new table with Stretch Database enabled or disabled. Per ulteriori informazioni, vedere Stretch Database.For more info, see Stretch Database.

Abilitazione di estensione Database per una tabellaEnabling Stretch Database for a table

Quando si abilita estensione per una tabella specificando ON, è possibile specificare facoltativamente MIGRATION_STATE = OUTBOUND per iniziare subito la migrazione dei dati o MIGRATION_STATE = PAUSED per posticipare la migrazione dei dati.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. Il valore predefinito è MIGRATION_STATE = OUTBOUND.The default value is MIGRATION_STATE = OUTBOUND. Per ulteriori informazioni sull'abilitazione dell'estensione per una tabella, vedere abilitare estensione Database per una tabella.For more info about enabling Stretch for a table, see Enable Stretch Database for a table.

Prerequisiti.Prerequisites. Prima abilitare l'estensione per una tabella, è necessario abilitare l'estensione nel server e sul database.Before you enable Stretch for a table, you have to enable Stretch on the server and on the database. Per ulteriori informazioni, vedere Enable Stretch Database for a database.For more info, see Enable Stretch Database for a database.

Autorizzazioni.Permissions. Abilitazione dell'estensione per un database o una tabella richiede autorizzazioni db_owner.Enabling Stretch for a database or a table requires db_owner permissions. Abilitazione dell'estensione per una tabella richiede anche autorizzazioni ALTER sulla tabella.Enabling Stretch for a table also requires ALTER permissions on the table.

[FILTER_PREDICATE = {null | predicato }][ FILTER_PREDICATE = { null | predicate } ]

Si applica a: SQL Server 2016SQL Server 2016 tramite SQL Server 2017SQL Server 2017.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017.

Facoltativamente è possibile specificare un predicato del filtro per selezionare righe di cui eseguire la migrazione da una tabella che contiene i dati correnti e cronologici.Optionally specifies a filter predicate to select rows to migrate from a table that contains both historical and current data. Il predicato deve chiamare una funzione con valori di tabella inline deterministica.The predicate must call a deterministic inline table-valued function. Per altre informazioni, vedere abilitare estensione Database per una tabella e selezionare righe di cui eseguire la migrazione tramite una funzione di filtro.For more info, see Enable Stretch Database for a table and Select rows to migrate by using a filter function.

Importante

Se si specifica un predicato del filtro inefficace, anche la migrazione dei dati risulterà inefficace.If you provide a filter predicate that performs poorly, data migration also performs poorly. Stretch Database applica il predicato del filtro alla tabella usando l'operatore CROSS APPLY.Stretch Database applies the filter predicate to the table by using the CROSS APPLY operator.

Se non si specifica un predicato del filtro, viene eseguita la migrazione dell'intera tabella.If you don't specify a filter predicate, the entire table is migrated.

Quando si specifica un predicato del filtro, è necessario specificare anche MIGRATION_STATE.When you specify a filter predicate, you also have to specify MIGRATION_STATE.

MIGRATION_STATE = {IN USCITA | CONNESSIONI IN ENTRATA | IN PAUSA}MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }

Si applica a: SQL Server 2016SQL Server 2016 tramite SQL Server 2017SQL Server 2017e SQL Azure.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017, and Azure SQL .

Si applica a: SQL Server 2014SQL Server 2014 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and Database SQL di AzureAzure SQL Database.

ON valore indica che la tabella è ottimizzata per la memoria.The value ON indicates that the table is memory optimized. Le tabelle con ottimizzazione per la memoria sono parte della funzionalità di OLTP In memoria, viene utilizzata ottimizzare le prestazioni dell'elaborazione delle transazioni.Memory-optimized tables are part of the In-Memory OLTP feature, which is used to optimized the performance of transaction processing. Per iniziare a OLTP In memoria vedere avvio rapido 1: tecnologie OLTP In memoria per più rapidamente le prestazioni di Transact-SQL.To get started with In-Memory OLTP see Quick Start 1: In-Memory OLTP Technologies for Faster Transact-SQL Performance. Per informazioni più dettagliate sulle tabelle con ottimizzazione per la memoria vedere Optimized tabelle.For more in-depth information about memory-optimized tables see Memory-Optimized Tables.

Il valore predefinito è impostata su OFF indica che la tabella è basata su disco.The default value OFF indicates that the table is disk-based.

DURABILITYDURABILITY

Si applica a: SQL Server 2014SQL Server 2014 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and Database SQL di AzureAzure SQL Database.

Il valore di SCHEMA_AND_DATA indica che la tabella è durevole, vale a dire che le modifiche vengono rese persistenti su disco e valide anche dopo il riavvio o failover.The value of SCHEMA_AND_DATA indicates that the table is durable, meaning that changes are persisted on disk and survive restart or failover. SCHEMA_AND_DATA è il valore predefinito.SCHEMA_AND_DATA is the default value.

Il valore di SCHEMA_ONLY indica che la tabella non è durevole.The value of SCHEMA_ONLY indicates that the table is non-durable. Lo schema della tabella è persistente ma alcuni aggiornamenti di dati non vengono mantenuti durante un riavvio o failover del database.The table schema is persisted but any data updates are not persisted upon a restart or failover of the database. DURABILITY = SCHEMA_ONLY è consentita solo con MEMORY_OPTIMIZED = ON.DURABILITY=SCHEMA_ONLY is only allowed with MEMORY_OPTIMIZED=ON.

Avviso

Quando viene creata una tabella con DURABILITY = SCHEMA_ONLY, e READ_COMMITTED_SNAPSHOT viene successivamente modificata usando ALTER DATABASE, nella tabella dati andranno perduti.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

Si applica a: SQL Server 2014SQL Server 2014 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 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 ulteriori informazioni sui numeri di bucket, vedere indici per tabelle con ottimizzazione.For more information about bucket counts, see Indexes for Memory-Optimized Tables.

Bucket_count è un argomento obbligatorio.Bucket_count is a required argument.

INDEXINDEX

Si applica a: SQL Server 2014SQL Server 2014 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and Database SQL di AzureAzure SQL Database.

Gli indici di colonna e di tabella possono essere specificati come parte dell'istruzione CREATE TABLE.Column and table indexes can be specified as part of the CREATE TABLE statement. Per informazioni sull'aggiunta e rimozione di indici nelle tabelle con ottimizzazione per la memoria, vedere: modifica di tabelleFor details about adding and removing indexes on memory-optimized tables see: Altering Memory-Optimized Tables

HASHHASH

Si applica a: SQL Server 2014SQL Server 2014 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 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.

OsservazioniRemarks

Per informazioni sul numero di tabelle consentite, colonne, vincoli e indici, vedere Maximum Capacity Specifications for SQL Server.For information about the number of allowed tables, columns, constraints and indexes, see Maximum Capacity Specifications for SQL Server.

Lo spazio in tabelle e indici viene generalmente allocato con incrementi di un extent.Space is generally allocated to tables and indexes in increments of one extent at a time. Quando l'opzione SET MIXED_PAGE_ALLOCATION di ALTER DATABASE è impostato TRUE, o sempre prima di SQL Server 2016SQL Server 2016, quando viene creata una tabella o indice, vengono allocate pagine da extent misti fino a quando non dispone di pagine sufficiente per riempire un extent uniforme.When the SET MIXED_PAGE_ALLOCATION option of ALTER DATABASE is set to TRUE, or always prior to SQL Server 2016SQL Server 2016, when a table or index is created, it is allocated pages from mixed extents until it has enough pages to fill a uniform extent. In seguito, viene allocato un altro extent ogni volta che gli extent allocati risultano pieni.After it has enough pages to fill a uniform extent, another extent is allocated every time the currently allocated extents become full. Per un report sulla quantità di spazio allocato e utilizzato da una tabella, eseguire sp_spaceused.For a report about the amount of space allocated and used by a table, execute sp_spaceused.

Motore di databaseDatabase Engine non prevede l'applicazione di un ordine particolare per l'impostazione dei valori DEFAULT, IDENTITY, ROWGUIDCOL o dei vincoli di colonna in una definizione di colonna.The Motore di databaseDatabase Engine does not enforce an order in which DEFAULT, IDENTITY, ROWGUIDCOL, or column constraints are specified in a column definition.

Quando viene creata una tabella, l'opzione QUOTED IDENTIFIER viene sempre archiviata con l'impostazione ON nei metadati della tabella, anche se l'opzione viene impostata su OFF quando si crea la tabella.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.

Tabelle temporaneeTemporary Tables

È possibile creare tabelle temporanee locali e globali.You can create local and global temporary tables. Le tabelle temporanee locali sono visibili solo nella sessione corrente, mentre quelle globali sono visibili in tutte le sessioni.Local temporary tables are visible only in the current session, and global temporary tables are visible to all sessions. Non è possibile partizionare le tabelle temporanee.Temporary tables cannot be partitioned.

Prefisso di nomi di tabella temporanea locale con solo simbolo di cancelletto (#table_name) e i nomi di tabella temporanea globale con un simbolo di cancelletto doppio del prefisso (# #table_name).Prefix local temporary table names with single number sign (#table_name), and prefix global temporary table names with a double number sign (##table_name).

Istruzioni SQL fanno riferimento alla tabella temporanea utilizzando il valore specificato per table_name nell'istruzione CREATE TABLE, per esempio # # #:SQL statements reference the temporary table by using the value specified for table_name in the CREATE TABLE statement, for example####:

CREATE TABLE #MyTempTable (cola INT PRIMARY KEY);  

INSERT INTO #MyTempTable VALUES (1);  

Se si creano più tabelle temporanee all'interno di una sola stored procedure o di un singolo batch, è necessario che i nomi delle tabelle siano diversi.If more than one temporary table is created inside a single stored procedure or batch, they must have different names.

Se viene creata una tabella temporanea locale in una stored procedure o in un'applicazione che può essere eseguita contemporaneamente da più utenti, Motore di databaseDatabase Engine deve essere in grado di distinguere le tabelle create dai vari utenti.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 Motore di databaseDatabase Engine must be able to distinguish the tables created by the different users. A tale scopo, Motore di databaseDatabase Engine aggiunge internamente un suffisso numerico a ogni nome di tabella temporanea locale.The Motore di databaseDatabase Engine does this by internally appending a numeric suffix to each local temporary table name. Il nome completo di una tabella temporanea archiviato nella sysobjects tabella tempdb è costituito il nome della tabella specificato nell'istruzione CREATE TABLE e il suffisso numerico generato dal 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. Per consentire il suffisso table_name specificato per un nome temporaneo locale non può superare i 116 caratteri.To allow for the suffix, table_name specified for a local temporary name cannot exceed 116 characters.

Le tabelle temporanee vengono eliminate automaticamente quando non sono più comprese nell'ambito, a meno di eliminarle in modo esplicito tramite l'istruzione DROP TABLE:Temporary tables are automatically dropped when they go out of scope, unless explicitly dropped by using DROP TABLE:

  • Una tabella temporanea locale creata in una stored procedure viene eliminata automaticamente al termine della stored procedure.A local temporary table created in a stored procedure is dropped automatically when the stored procedure is finished. È possibile fare riferimento alla tabella da qualsiasi stored procedure nidificata eseguita dalla stored procedure con cui è stata creata la tabella.The table can be referenced by any nested stored procedures executed by the stored procedure that created the table. Non è invece possibile fare riferimento alla tabella dal processo che ha chiamato la stored procedure con cui è stata creata la tabella.The table cannot be referenced by the process that called the stored procedure that created the table.

  • Tutte le altre tabelle temporanee locali vengono eliminate automaticamente alla fine della sessione corrente.All other local temporary tables are dropped automatically at the end of the current session.

  • Le tabelle temporanee globali vengono eliminate automaticamente alla fine della sessione in cui è stata creata la tabella e quando tutte le altre attività non vi fanno più riferimento.Global temporary tables are automatically dropped when the session that created the table ends and all other tasks have stopped referencing them. L'associazione tra un'attività e una tabella viene mantenuta solo per la durata di una singola istruzione Transact-SQLTransact-SQL.The association between a task and a table is maintained only for the life of a single Transact-SQLTransact-SQL statement. Una tabella temporanea globale viene pertanto eliminata dopo il completamento dell'ultima istruzione Transact-SQLTransact-SQL che fa attivamente riferimento alla tabella alla fine della sessione di creazione.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 tabella temporanea locale creata all'interno di una stored procedure o in un trigger può avere lo stesso nome di una tabella temporanea creata prima della chiamata alla stored procedure o al trigger.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. Se tuttavia una query fa riferimento a una tabella temporanea e sono disponibili due tabelle temporanee con lo stesso nome, non è possibile stabilire in base a quale tabella verrà risolta la query.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. Anche le stored procedure nidificate possono creare tabelle temporanee con lo stesso nome di una tabella temporanea creata dalla stored procedure chiamante.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. In questo caso, tuttavia, per fare in modo che le modifiche vengano applicate alla tabella creata nella stored procedure nidificata, è necessario che la struttura della tabella e i nomi di colonna siano identici a quelli della tabella creata nella procedura chiamante,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. come illustrato nell'esempio seguente.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  

Set di risultati:Here is the result set.

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

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

Quando si creano tabelle temporanee locali o globali, la sintassi dell'istruzione CREATE TABLE supporta le definizioni di vincolo, ad eccezione dei vincoli FOREIGN KEY.When you create local or global temporary tables, the CREATE TABLE syntax supports constraint definitions except for FOREIGN KEY constraints. Se si specifica un vincolo FOREIGN KEY in una tabella temporanea, l'istruzione restituisce un messaggio di avviso per segnalare che il vincolo è stato ignorato.If a FOREIGN KEY constraint is specified in a temporary table, the statement returns a warning message that states the constraint was skipped. La tabella viene comunque creata senza i vincoli FOREIGN KEY.The table is still created without the FOREIGN KEY constraints. Non è possibile fare riferimento a tabelle temporanee nei vincoli FOREIGN KEY.Temporary tables cannot be referenced in FOREIGN KEY constraints.

Se una tabella temporanea viene creata con un vincolo denominato e all'interno dell'ambito di una transazione definita dall'utente, solo un utente alla volta può eseguire l'istruzione che crea la tabella temporanea.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. Se ad esempio una stored procedure crea una tabella temporanea con un vincolo di chiave primaria denominato, la stored procedure non può essere eseguita simultaneamente dai più utenti.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.

Le tabelle temporanee globali (Database SQL di Azure) con ambito databaseDatabase scoped global temporary tables (Azure SQL Database)

Le tabelle temporanee globali per SQL Server (avviata con # # nome della tabella) sono archiviate in tempdb e condivise tra le sessioni di tutti gli utenti nell'intera istanza di SQL Server.Global temporary tables for SQL Server (initiated with ## table name) are stored in tempdb and shared among all users’ sessions across the whole SQL Server instance. Per informazioni sui tipi di tabella SQL, vedere la sezione precedente nella creazione di tabelle.For information on SQL table types, see the above section on Create Tables.

Database SQL di Azure supporta le tabelle temporanee globali sono inoltre archiviate in tempdb e il cui ambite al livello di database.Azure SQL Database supports global temporary tables that are also stored in tempdb and scoped to the database level. Ciò significa che le tabelle temporanee globali vengono condivisi per le sessioni di tutti gli utenti all'interno del database SQL di Azure stesso.This means that global temporary tables are shared for all users’ sessions within the same Azure SQL database. Le sessioni utente dagli altri database di SQL Azure non è possibile accedere a tabelle temporanee globali.User sessions from other Azure SQL databases cannot access global temporary tables.

Le tabelle temporanee globali per il database SQL di Azure seguono la stessa sintassi e semantica utilizzata da SQL Server per le tabelle temporanee.Global temporary tables for Azure SQL DB follow the same syntax and semantics that SQL Server uses for temporary tables. Analogamente, stored procedure temporanee globali sono limitate anche al livello di database nel database di SQL Azure.Similarly, global temporary stored procedures are also scoped to the database level in Azure SQL DB. Tabelle temporanee locali (avviate con il nome di tabella #) sono supportate anche per Database SQL di Azure e seguano la stessa sintassi e semantica utilizzata da SQL Server.Local temporary tables (initiated with # table name) are also supported for Azure SQL Database and follow the same syntax and semantics that SQL Server uses. Vedere la sezione precedente relativa tabelle temporanee.See the above section on Temporary Tables.

Importante

Questa funzionalità è disponibile in anteprima pubblica e disponibile per il Database SQL di Azure.This feature is in public preview and is available for Azure SQL Database.

Risoluzione dei problemi relativi a tabelle temporanee globali per il database SQL di AzureTroubleshooting global temporary tables for Azure SQL DB

Per la risoluzione dei problemi di tempdb, vedere spazio di risoluzione dei problemi di disco insufficiente in tempdb.For the troubleshooting the tempdb, see Troubleshooting Insufficient Disk space in tempdb. Per accedere le DMV di risoluzione dei problemi nel Database di SQL Azure, è necessario essere un amministratore del server.To access the troubleshooting DMVs in Azure SQL Database, you must be a server admin.

PermissionsPermissions

Qualsiasi utente può creare oggetti temporanei globali.Any user can create global temporary objects. Gli utenti possono accedere solo ai propri oggetti, a meno che non ottengano ulteriori autorizzazioni.Users can only access their own objects, unless they receive additional permissions. ..

EsempiExamples

  • Sessione crea una tabella temporanea globale ##test nel Database SQL di Azure testdb1 e aggiunge la 1 rigaSession A creates a global temp table ##test in Azure 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'; 

---Result
1253579504

---Obtain global temp table name for a given object ID 1253579504 in tempdb (2)
SELECT name FROM tempdb.sys.objects WHERE object_id = 1253579504

---Result
##test
  • Sessione B si connette al Database SQL di Azure testdb1 e può accedere a tabella ##test creato da una sessioneSession B connects to Azure SQL Database testdb1 and can access table ##test created by session A
SELECT * FROM ##test
---Results
1,1
  • Sessione C si connette a un altro database in Database SQL di Azure testdb2 e desidera accedere ##test creato in testdb1.Session C connects to another database in Azure SQL Database testdb2 and wants to access ##test created in testdb1. Questa selezione non riesce a causa dell'ambito del database per le tabelle temporanee globaliThis select fails due to the database scope for the global temp tables
SELECT * FROM ##test
---Results
Msg 208, Level 16, State 0, Line 1
Invalid object name '##test'
  • Indirizzamento di oggetto di sistema nel Database SQL di Azure tempdb dal testdb1 di database utente correnteAddressing system object in Azure SQL Database tempdb from current user database testdb1
SELECT * FROM tempdb.sys.objects
SELECT * FROM tempdb.sys.columns
SELECT * FROM tempdb.sys.database_files

Tabelle partizionatePartitioned Tables

Prima di creare una tabella partizionata con CREATE TABLE, è necessario creare una funzione di partizione per specificare la modalità di partizionamento della tabella.Before creating a partitioned table by using CREATE TABLE, you must first create a partition function to specify how the table becomes partitioned. Viene creata una funzione di partizione utilizzando CREATE PARTITION FUNCTION.A partition function is created by using CREATE PARTITION FUNCTION. In secondo luogo, è necessario creare uno schema di partizione per specificare i filegroup di destinazione delle partizioni indicate dalla funzione di partizione.Second, you must create a partition scheme to specify the filegroups that will hold the partitions indicated by the partition function. Viene creato uno schema di partizione utilizzando CREATE PARTITION SCHEME.A partition scheme is created by using CREATE PARTITION SCHEME. Per le tabelle partizionate non è possibile posizionare i vincoli PRIMARY KEY o UNIQUE in filegroup diversi.Placement of PRIMARY KEY or UNIQUE constraints to separate filegroups cannot be specified for partitioned tables. Per altre informazioni, vedere Partitioned Tables and Indexes.For more information, see Partitioned Tables and Indexes.

Vincoli PRIMARY KEYPRIMARY KEY Constraints

  • In una tabella è possibile includere un solo vincolo PRIMARY KEY.A table can contain only one PRIMARY KEY constraint.

  • Se l'indice viene generato da un vincolo PRIMARY KEY, nella tabella sarà possibile creare non più di 999 indici non cluster e di 1 indice cluster.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.

  • Nel caso in cui per un vincolo PRIMARY KEY non si specifichi CLUSTERED né NONCLUSTERED, verrà utilizzato automaticamente il valore CLUSTERED se per i vincoli UNIQUE non sono specificati indici cluster.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.

  • Tutte le colonne specificate in un vincolo PRIMARY KEY devono essere definite come NOT NULL.All columns defined within a PRIMARY KEY constraint must be defined as NOT NULL. Se non si specifica il supporto di valori Null, per tutte le colonne coinvolte in un vincolo PRIMARY KEY viene impostato NOT NULL.If nullability is not specified, all columns participating in a PRIMARY KEY constraint have their nullability set to NOT NULL.

    Nota

    Per le tabelle con ottimizzazione per la memoria, la colonna chiave che ammettono valori null è consentita.For memory-optimized tables, the NULLable key column is allowed.

  • Se si definisce una chiave primaria in una colonna di tipo CLR definito dall'utente, è necessario che l'implementazione del tipo supporti l'ordinamento binario.If a primary key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. Per altre informazioni, vedere Tipi CLR definiti dall'utente.For more information, see CLR User-Defined Types.

Vincoli UNIQUEUNIQUE Constraints

  • Se per un vincolo UNIQUE non si specifica CLUSTERED né NONCLUSTERED, il valore predefinito è NONCLUSTERED.If CLUSTERED or NONCLUSTERED is not specified for a UNIQUE constraint, NONCLUSTERED is used by default.

  • Ogni vincolo UNIQUE genera un indice.Each UNIQUE constraint generates an index. Il numero di vincoli UNIQUE non deve generare un numero di indici della tabella maggiore di 999, in caso di indici non cluster, e di 1, in caso di indici cluster.The number of UNIQUE constraints cannot cause the number of indexes on the table to exceed 999 nonclustered indexes and 1 clustered index.

  • Se si definisce un vincolo UNIQUE in una colonna di tipo CLR definito dall'utente, è necessario che l'implementazione del tipo supporti l'ordinamento binario o basato su operatore.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. Per altre informazioni, vedere Tipi CLR definiti dall'utente.For more information, see CLR User-Defined Types.

Vincoli FOREIGN KEYFOREIGN KEY Constraints

  • I valori diversi da NULL immessi nella colonna di un vincolo FOREIGN KEY devono essere presenti nella colonna a cui viene fatto riferimento. In caso contrario, viene restituito un messaggio di errore di violazione della chiave esterna.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.

  • I vincoli FOREIGN KEY vengono applicati alla colonna precedente, a meno che non vengano specificate colonne di origine.FOREIGN KEY constraints are applied to the preceding column, unless source columns are specified.

  • I vincoli FOREIGN KEY possono fare riferimento solo a tabelle di un singolo database nello stesso server.FOREIGN KEY constraints can reference only tables within the same database on the same server. L'integrità referenziale tra database diversi deve essere implementata tramite trigger.Cross-database referential integrity must be implemented through triggers. Per altre informazioni, vedere CREATE TRIGGER (Transact-SQL).For more information, see CREATE TRIGGER (Transact-SQL).

  • I vincoli FOREIGN KEY possono fare riferimento a un'altra colonna nella stessa tabella.FOREIGN KEY constraints can reference another column in the same table. Questo tipo di vincolo viene definito autoreferenziale.This is referred to as a self-reference.

  • La clausola REFERENCES di un vincolo FOREIGN KEY a livello di colonna può includere una sola colonna di riferimento.The REFERENCES clause of a column-level FOREIGN KEY constraint can list only one reference column. Il tipo di dati di tale colonna deve essere uguale al tipo di dati della colonna in cui viene definito il vincolo.This column must have the same data type as the column on which the constraint is defined.

  • La clausola REFERENCES di un vincolo FOREIGN KEY a livello di tabella deve includere lo stesso numero di colonne di riferimento di quelle presenti nell'elenco di colonne del vincolo.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. Il tipo di dati di ogni colonna di riferimento deve inoltre essere uguale a quello della colonna corrispondente nell'elenco di colonne.The data type of each reference column must also be the same as the corresponding column in the column list.

  • Non è possibile specificare CASCADE, SET NULL o SET DEFAULT se una colonna di tipo timestamp fa parte di chiave esterna o la chiave di cui si fa riferimento.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.

  • È possibile combinare le azioni CASCADE, SET NULL, SET DEFAULT e NO ACTION in tabelle con relazioni referenziali reciproche.CASCADE, SET NULL, SET DEFAULT and NO ACTION can be combined on tables that have referential relationships with each other. Se Motore di databaseDatabase Engine rileva l'azione NO ACTION, l'operazione viene arrestata e viene eseguito il rollback delle azioni CASCADE, SET NULL e SET DEFAULT correlate.If the Motore di databaseDatabase Engine encounters NO ACTION, it stops and rolls back related CASCADE, SET NULL and SET DEFAULT actions. Quando un'istruzione DELETE genera una combinazione di azioni CASCADE, SET NULL, SET DEFAULT e NO ACTION, tutte le azioni CASCADE, SET NULL e SET DEFAULT vengono applicate prima che il Motore di databaseDatabase Engine verifichi l'esistenza di azioni 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 Motore di databaseDatabase Engine checks for any NO ACTION.

  • Il Motore di databaseDatabase Engine non prevede un limite predefinito per il numero di vincoli FOREIGN KEY che possono essere inclusi in una tabella e che fanno riferimento ad altre tabelle o per il numero di vincoli FOREIGN KEY di proprietà di altre tabelle che fanno riferimento a una tabella specifica.The Motore di databaseDatabase 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.

    Il numero effettivo di vincoli FOREIGN KEY che è possibile usare, tuttavia, è limitato dalla configurazione hardware e dalla progettazione del database e dell'applicazione.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. È consigliabile evitare che una tabella contenga più di 253 vincoli FOREIGN KEY e che più di 253 vincoli FOREIGN KEY facciano riferimento alla tabella stessa.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. Il limite effettivo potrebbe variare a seconda dell'applicazione e della configurazione hardware.The effective limit for you may be more or less depending on the application and hardware. Nella progettazione di database e applicazioni è opportuno valutare i costi correlati all'applicazione dei vincoli FOREIGN KEY.Consider the cost of enforcing FOREIGN KEY constraints when you design your database and applications.

  • I vincoli FOREIGN KEY non vengono applicati nelle tabelle temporanee.FOREIGN KEY constraints are not enforced on temporary tables.

  • I vincoli FOREIGN KEY possono fare riferimento solo alle colonne di vincoli PRIMARY KEY o UNIQUE della tabella a cui si fa riferimento o alle colonne in un indice univoco di tale tabella.FOREIGN KEY constraints can reference only columns in PRIMARY KEY or UNIQUE constraints in the referenced table or in a UNIQUE INDEX on the referenced table.

  • Se si definisce una chiave esterna su una colonna di tipo CLR definito dall'utente, è necessario che l'implementazione del tipo supporti l'ordinamento binario.If a foreign key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. Per altre informazioni, vedere Tipi CLR definiti dall'utente.For more information, see CLR User-Defined Types.

  • Le colonne incluse in una relazione di chiave esterna devono essere definite con la stessa lunghezza e la stessa scala.Columns participating in a foreign key relationship must be defined with the same length and scale.

Definizioni DEFAULTDEFAULT Definitions

  • Una colonna può contenere una sola definizione DEFAULT.A column can have only one DEFAULT definition.

  • Una definizione DEFAULT può includere valori costanti, funzioni, funzioni senza parametri standard SQL o valori NULL.A DEFAULT definition can contain constant values, functions, SQL standard niladic functions, or NULL. Nella tabella seguente sono illustrati le funzioni senza parametri e i valori predefiniti corrispondenti restituiti durante un'istruzione INSERT.The following table shows the niladic functions and the values they return for the default during an INSERT statement.

    Funzione senza parametri SQL-92SQL-92 niladic function Valore restituitoValue returned
    CURRENT_TIMESTAMPCURRENT_TIMESTAMP Data e ora correnti.Current date and time.
    CURRENT_USERCURRENT_USER Nome dell'utente che esegue un inserimento.Name of user performing an insert.
    SESSION_USERSESSION_USER Nome dell'utente che esegue un inserimento.Name of user performing an insert.
    SYSTEM_USERSYSTEM_USER Nome dell'utente che esegue un inserimento.Name of user performing an insert.
    UtenteUSER Nome dell'utente che esegue un inserimento.Name of user performing an insert.
  • constant_expression predefinita definizione non può fare riferimento a un'altra colonna nella tabella o di altre tabelle, viste o stored procedure.constant_expression in a DEFAULT definition cannot refer to another column in the table, or to other tables, views, or stored procedures.

  • Non è possibile creare definizioni DEFAULT in colonne con un timestamp tipo di dati o le colonne con una proprietà IDENTITY.DEFAULT definitions cannot be created on columns with a timestamp data type or columns with an IDENTITY property.

  • Non è possibile creare definizioni DEFAULT per colonne con tipo di dati alias se tale tipo di dati è associato a un oggetto predefinito.DEFAULT definitions cannot be created for columns with alias data types if the alias data type is bound to a default object.

Vincoli CHECKCHECK Constraints

  • Una colonna può contenere un numero qualsiasi di vincoli CHECK e la condizione può includere più espressioni logiche unite tramite gli operatori AND e OR.A column can have any number of CHECK constraints, and the condition can include multiple logical expressions combined with AND and OR. Più vincoli CHECK per una colonna vengono convalidati nell'ordine di creazione.Multiple CHECK constraints for a column are validated in the order they are created.

  • La condizione di ricerca deve restituire un'espressione booleana e non può fare riferimento a un'altra tabella.The search condition must evaluate to a Boolean expression and cannot reference another table.

  • Un vincolo CHECK a livello di colonna può fare riferimento solo alla colonna vincolata, mentre un vincolo CHECK a livello di tabella può fare riferimento solo alle colonne della stessa tabella.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.

    Le regole e i vincoli CHECK svolgono la stessa funzione di convalida dei dati durante l'esecuzione delle istruzioni INSERT e UPDATE.CHECK CONSTRAINTS and rules serve the same function of validating the data during INSERT and UPDATE statements.

  • Quando per una o più colonne sono definiti una regola e uno o più vincoli CHECK, vengono valutate tutte le restrizioni.When a rule and one or more CHECK constraints exist for a column or columns, all restrictions are evaluated.

  • Impossibile definire vincoli CHECK su testo, ntext, o immagine colonne.CHECK constraints cannot be defined on text, ntext, or image columns.

Informazioni aggiuntive sui vincoliAdditional Constraint Information

  • L'istruzione DROP INDEX non consente di eliminare un indice creato per un vincolo. Per eliminare il vincolo, è necessario usare l'istruzione 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 indice creato per un vincolo specifico e da esso utilizzato può essere ricompilato tramite l'istruzione ALTER INDEX...REBUILD.An index created for and used by a constraint can be rebuilt by using ALTER INDEX...REBUILD. Per altre informazioni, vedere Riorganizzare e ricompilare gli indici.For more information, see Reorganize and Rebuild Indexes.

  • I nomi di vincolo devono seguire le regole per identificatori, ad eccezione del fatto che il nome non può iniziare con un simbolo di cancelletto (#).Constraint names must follow the rules for identifiers, except that the name cannot start with a number sign (#). Se constraint_name viene omesso, il vincolo viene assegnato un nome generato dal sistema.If constraint_name is not supplied, a system-generated name is assigned to the constraint. Il nome del vincolo viene indicato nei messaggi di errore relativi alle violazioni di vincolo.The constraint name appears in any error message about constraint violations.

  • Quando in un'istruzione INSERT, UPDATE o DELETE viene violato un vincolo, l'istruzione viene interrotta.When a constraint is violated in an INSERT, UPDATE, or DELETE statement, the statement is ended. Con l'impostazione OFF per SET XACT_ABORT, tuttavia, la transazione continua a essere elaborata se l'istruzione fa parte di una transazione esplicita.However, when SET XACT_ABORT is set to OFF, the transaction, if the statement is part of an explicit transaction, continues to be processed. Se l'impostazione di SET XACT_ABORT è ON, viene eseguito il rollback dell'intera transazione.When SET XACT_ABORT is set to ON, the whole transaction is rolled back. È inoltre possibile utilizzare l'istruzione ROLLBACK TRANSACTION con la definizione di transazione controllando il @@ERROR funzione di sistema.You can also use the ROLLBACK TRANSACTION statement with the transaction definition by checking the @@ERROR system function.

  • Con ALLOW_ROW_LOCKS = ON e ALLOW_PAGE_LOCK = ON, sono consentiti blocchi a livello di riga, di pagina e di tabella per l'accesso all'indice.When ALLOW_ROW_LOCKS = ON and ALLOW_PAGE_LOCK = ON, row-, page-, and table-level locks are allowed when you access the index. Motore di databaseDatabase Engine sceglie il blocco appropriato e può eseguire un'escalation del blocco da un blocco di riga o di pagina a un blocco di tabella.The Motore di databaseDatabase Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock. Se ALLOW_ROW_LOCKS = OFF e ALLOW_PAGE_LOCK = OFF, sono consentiti solo blocchi a livello di tabella per l'accesso all'indice.When ALLOW_ROW_LOCKS = OFF and ALLOW_PAGE_LOCK = OFF, only a table-level lock is allowed when you access the index.

  • Se una tabella include vincoli FOREIGN KEY o CHECK e trigger, le condizioni di vincolo vengono valutate prima dell'esecuzione del trigger.If a table has FOREIGN KEY or CHECK CONSTRAINTS and triggers, the constraint conditions are evaluated before the trigger is executed.

    Per un report in una tabella e le relative colonne, utilizzare sp_help o sp_helpconstraint.For a report on a table and its columns, use sp_help or sp_helpconstraint. Per rinominare una tabella, utilizzare sp_rename.To rename a table, use sp_rename. Per un report sulle viste e stored procedure che dipendono da una tabella, utilizzare Sys.dm sql_referenced_entities e Sys.dm sql_referencing_entities.For a report on the views and stored procedures that depend on a table, use sys.dm_sql_referenced_entities and sys.dm_sql_referencing_entities.

Regole per il supporto di valori Null all'interno di una definizione di tabellaNullability Rules Within a Table Definition

L'impostazione del supporto di valori Null per una colonna determina se la colonna ammette o meno valori Null (NULL) come dati.The nullability of a column determines whether that column can allow a null value (NULL) as the data in that column. NULL non equivale né a zero né a uno spazio vuoto, ma indica che non è stata immessa alcuna voce oppure che è stato specificato un valore NULL esplicito e in genere implica che il valore è sconosciuto o non applicabile.NULL is not zero or blank: NULL means no entry was made or an explicit NULL was supplied, and it typically implies that the value is either unknown or not applicable.

Quando si crea o si modifica una tabella con l'istruzione CREATE TABLE o ALTER TABLE, le impostazioni del database e della sessione influiscono ed eventualmente sono prioritarie sull'impostazione del supporto di valori Null per il tipo di dati in una definizione di colonna.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. È consigliabile definire sempre in modo esplicito una colonna come NULL o NOT NULL per le colonne non calcolate oppure, se si utilizza un tipo di dati definito dall'utente, consentire nella colonna l'utilizzo dell'impostazione predefinita relativa al supporto di valori Null per tale tipo di dati.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. Le colonne di tipo sparse devono consentire sempre valori Null.Sparse columns must always allow NULL.

Se non si specifica in modo esplicito il supporto di valori Null per una colonna, saranno valide le regole indicate nella tabella seguente.When column nullability is not explicitly specified, column nullability follows the rules shown in the following table.

Tipo di dati colonnaColumn data type RuleRule
Tipo di dati aliasAlias data type Motore di databaseDatabase Engine utilizza l'impostazione del supporto di valori Null specificata in fase di creazione del tipo di dati.The Motore di databaseDatabase Engine uses the nullability that is specified when the data type was created. Per determinare i valori null del tipo di dati predefiniti, utilizzare sp_help.To determine the default nullability of the data type, use sp_help.
Tipo CLR definito dall'utenteCLR user-defined type Il supporto dei valori Null viene stabilito in base alla definizione della colonna.Nullability is determined according to the column definition.
Tipo di dati fornito dal sistemaSystem-supplied data type Se il tipo di dati fornito dal sistema prevede una sola opzione, questa ha la precedenza.If the system-supplied data type has only one option, it takes precedence. timestamp devono essere tipi di dati non NULL.timestamp data types must be NOT NULL. Quando sono presenti impostazioni di sessione specificate su ON tramite SET:When any session settings are set ON by using SET:
ANSI_NULL_DFLT_ON = ON, viene assegnato il valore NULL.ANSI_NULL_DFLT_ON = ON, NULL is assigned.
ANSI_NULL_DFLT_OFF = ON, non è assegnato il valore NULL.ANSI_NULL_DFLT_OFF = ON, NOT NULL is assigned.

Quando sono presenti impostazioni del database configurate tramite ALTER DATABASE:When any database settings are configured by using ALTER DATABASE:
ANSI_NULL_DEFAULT_ON = ON, viene assegnato il valore NULL.ANSI_NULL_DEFAULT_ON = ON, NULL is assigned.
ANSI_NULL_DEFAULT_OFF = ON, non è assegnato il valore NULL.ANSI_NULL_DEFAULT_OFF = ON, NOT NULL is assigned.

Per visualizzare l'impostazione del database per ANSI_NULL_DEFAULT, usare il Sys. Databases vista del catalogoTo view the database setting for ANSI_NULL_DEFAULT, use the sys.databases catalog view

Quando per la sessione non è impostata alcuna opzione ANSI_NULL_DFLT e per il database è impostato il valore predefinito (ANSI_NULL_DEFAULT è OFF), viene assegnato il valore predefinito 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_DEFAULTis OFF), the default of NOT NULL is assigned.

Nel caso di una colonna calcolata, l'impostazione del supporto di valori Null viene sempre determinata automaticamente dal Motore di databaseDatabase Engine.If the column is a computed column, its nullability is always automatically determined by the Motore di databaseDatabase Engine. Per scoprire il supporto di valori null di questo tipo di colonna, utilizzare la funzione COLUMNPROPERTY con la AllowsNull proprietà.To find out the nullability of this type of column, use the COLUMNPROPERTY function with the AllowsNull property.

Nota

Per il driver ODBC di SQL Server e il provider Microsoft OLE DB per SQL Server l'impostazione predefinita dell'opzione ANSI_NULL_DFLT_ON è ON.The SQL Server ODBC driver and Microsoft OLE DB Provider for SQL Server both default to having ANSI_NULL_DFLT_ON set to ON. Gli utenti di ODBC e OLE DB possono configurare questa impostazione nelle origini dati ODBC oppure tramite le proprietà o gli attributi di connessione impostati dall'applicazione.ODBC and OLE DB users can configure this in ODBC data sources, or with connection attributes or properties set by the application.

Compressione dei datiData Compression

Le tabelle di sistema non possono essere abilitate per la compressione.System tables cannot be enabled for compression. Se non specificato diversamente, quando si crea una tabella la compressione dei dati è impostata su NONE.When you are creating a table, data compression is set to NONE, unless specified otherwise. Se si specifica un elenco di partizioni o una partizione non compresa nell'intervallo, verrà generato un errore.If you specify a list of partitions or a partition that is out of range, an error will be generated. Per altre informazioni sulla compressione dei dati, vedere Compressione dei dati.For a more information about data compression, see Data Compression.

Per valutare il modo in cui la modifica dello stato di compressione influirà su una tabella, un indice o una partizione, usare la stored procedure 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.

PermissionsPermissions

Sono richieste l'autorizzazione CREATE TABLE per il database e l'autorizzazione ALTER per lo schema in cui viene creata la tabella.Requires CREATE TABLE permission in the database and ALTER permission on the schema in which the table is being created.

Se una colonna nell'istruzione CREATE TABLE è definita con un tipo CLR definito dall'utente, è necessario che l'utente sia il proprietario del tipo o disponga dell'autorizzazione 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.

Se a una colonna nell'istruzione CREATE TABLE è associata una raccolta di XML Schema, è necessario che l'utente sia il proprietario della raccolta di XML Schema o disponga dell'autorizzazione 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.

Qualsiasi utente può creare tabelle temporanee in tempdb.Any user can create temporary tables in tempdb.

EsempiExamples

A.A. Creare un vincolo PRIMARY KEY in una colonnaCreate a PRIMARY KEY constraint on a column

Nell'esempio seguente viene illustrata la definizione di colonna per un vincolo PRIMARY KEY con un indice cluster nella colonna EmployeeID della tabella 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. Poiché un nome di vincolo non viene specificato, ne viene fornito uno dal sistema.Because a constraint name is not specified, the system supplies the constraint name.

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

B.B. Utilizzo di vincoli FOREIGN KEYUsing FOREIGN KEY constraints

Il vincolo FOREIGN KEY viene utilizzato per fare riferimento a un'altra tabella.A FOREIGN KEY constraint is used to reference another table. Le chiavi esterne possono essere chiavi a colonna singola o a più colonne.Foreign keys can be single-column keys or multicolumn keys. Nell'esempio seguente viene illustrato un vincolo FOREIGN KEY a colonna singola nella tabella SalesOrderHeader che fa riferimento alla tabella SalesPerson.This following example shows a single-column FOREIGN KEY constraint on the SalesOrderHeader table that references the SalesPerson table. Per un vincolo FOREIGN KEY a colonna singola è sufficiente specificare solo la clausola REFERENCES.Only the REFERENCES clause is required for a single-column FOREIGN KEY constraint.

SalesPersonID int NULL  
REFERENCES SalesPerson(SalesPersonID)  

È inoltre possibile usare la clausola FOREIGN KEY in modo esplicito per ridefinire l'attributo di colonna.You can also explicitly use the FOREIGN KEY clause and restate the column attribute. Si noti che il nome della colonna non deve essere identico in entrambe le tabelle.Note that the column name does not have to be the same in both tables.

FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(SalesPersonID)  

I vincoli con chiavi a più colonne vengono creati come vincoli di tabella.Multicolumn key constraints are created as table constraints. La tabella SpecialOfferProduct del database AdventureWorks2012AdventureWorks2012 include un vincolo PRIMARY KEY a più colonne.In the AdventureWorks2012AdventureWorks2012 database, the SpecialOfferProduct table includes a multicolumn PRIMARY KEY. Nell'esempio seguente viene illustrato come fare riferimento a questa chiave da un'altra tabella. Il nome di vincolo esplicito è facoltativo.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. Utilizzo di vincoli UNIQUEUsing UNIQUE constraints

I vincoli UNIQUE vengono utilizzati per imporre l'univocità di colonne chiave non primaria.UNIQUE constraints are used to enforce uniqueness on nonprimary key columns. Nell'esempio seguente viene applicata una restrizione per specificare che la colonna Name della tabella Product deve essere univoca.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. Utilizzo di definizioni DEFAULTUsing DEFAULT definitions

I valori predefiniti forniscono un valore (tramite le istruzioni INSERT e UPDATE) nel caso in cui non ne viene specificato alcuno.Defaults supply a value (with the INSERT and UPDATE statements) when no value is supplied. Il database AdventureWorks2012AdventureWorks2012 potrebbe, ad esempio, includere una tabella di ricerca con un elenco dei vari ruoli professionali che possono essere assegnati ai dipendenti della società.For example, the AdventureWorks2012AdventureWorks2012 database could include a lookup table listing the different jobs employees can fill in the company. Nella colonna destinata alla descrizione di ogni ruolo professionale, si potrebbe usare una stringa di caratteri predefinita per fornire una descrizione nel caso in cui questa non venga immessa in modo esplicito.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'  

Oltre alle costanti, le definizioni DEFAULT possono includere funzioni.In addition to constants, DEFAULT definitions can include functions. Per ottenere la data corrente per una voce, è possibile usare l'esempio seguente:Use the following example to get the current date for an entry.

DEFAULT (getdate())  

È inoltre possibile migliorare l'integrità dei dati tramite un'analisi di funzioni senza parametri.A niladic-function scan can also improve data integrity. Per tenere traccia dell'utente che ha inserito una riga, usare la funzione senza parametri per USER.To keep track of the user that inserted a row, use the niladic-function for USER. Non racchiudere le funzioni senza parametri tra parentesi.Do not enclose the niladic-functions with parentheses.

DEFAULT USER  

E.E. Utilizzo di vincoli CHECKUsing CHECK constraints

Nell'esempio seguente viene illustrata l'applicazione di una restrizione ai valori immessi nella colonna CreditRating della tabella Vendor.The following example shows a restriction made to values that are entered into the CreditRating column of the Vendor table. Al vincolo non viene assegnato un nome.The constraint is unnamed.

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

Nell'esempio seguente viene illustrato un vincolo denominato con una restrizione basata su modello per i dati di tipo carattere immessi in una colonna di una tabella.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]')  

Nell'esempio seguente viene specificato che i valori devono essere inclusi in un elenco specifico o essere conformi a un modello specificato.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. Visualizzazione della definizione completa della tabellaShowing the complete table definition

Nell'esempio seguente vengono illustrate le definizioni di tabella complete con tutte le definizioni dei vincoli per la tabella PurchaseOrderDetail creata nel database AdventureWorks2012AdventureWorks2012.The following example shows the complete table definitions with all constraint definitions for table PurchaseOrderDetail created in the AdventureWorks2012AdventureWorks2012 database. Per l'esecuzione dell'esempio, lo schema della tabella viene modificato in 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. Creazione di una tabella con una colonna xml tipizzata in una raccolta di XML SchemaCreating a table with an xml column typed to an XML schema collection

Nell'esempio seguente viene creata una tabella con una colonna xml tipizzata nella raccolta di XML Schema HRResumeSchemaCollection.The following example creates a table with an xml column that is typed to XML schema collection HRResumeSchemaCollection. Il DOCUMENT (parola chiave) specifica che ogni istanza del xml del tipo di dati column_name può contenere un solo elemento di primo livello.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. Creazione di una tabella partizionataCreating a partitioned table

Nell'esempio seguente viene creata una funzione di partizione per suddividere una tabella o indice in quattro partizioni.The following example creates a partition function to partition a table or index into four partitions. Viene quindi creato uno schema di partizione per specificare i filegroup in cui posizionare ognuna delle quattro partizioni.Then, the example creates a partition scheme that specifies the filegroups in which to hold each of the four partitions. Infine viene creata una tabella che utilizza tale schema di partizione.Finally, the example creates a table that uses the partition scheme. Nell'esempio si presuppone che i filegroup esistano già nel database.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  

Sulla base dei valori della colonna col1 di PartitionTable, le partizioni vengono assegnate nei modi seguenti.Based on the values of column col1 of PartitionTable, the partitions are assigned in the following ways.

FilegroupFilegroup test1fgtest1fg test2fgtest2fg test3fgtest3fg test4fgtest4fg
PartizionePartition 11 22 33 44
ValoriValues col 1 <= 1col 1 <= 1 > 1 col1 e col1 <= 100col1 > 1 AND col1 <= 100 col1 > 100 AND col1 <= 1000col1 > 100 AND col1 <= 1,000 col1 > 1000col1 > 1000

I.I. Utilizzo del tipo di dati uniqueidentifier in una colonnaUsing the uniqueidentifier data type in a column

Nell'esempio seguente viene creata una tabella con una colonna uniqueidentifier.The following example creates a table with a uniqueidentifier column. Il vincolo PRIMARY KEY viene utilizzato per evitare che gli utenti inseriscano valori duplicati nella tabella, mentre la funzione NEWSEQUENTIALID() nel vincolo DEFAULT fornisce i valori per le nuove righe.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. La proprietà ROWGUIDCOL viene applicata alla colonna uniqueidentifier in modo che sia possibile farvi riferimento tramite la parola chiave $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. Utilizzo di un'espressione per una colonna calcolataUsing an expression for a computed column

Nell'esempio seguente viene illustrato l'utilizzo di un'espressione ((low + high)/2) per calcolare la colonna calcolata 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. Creazione di una colonna calcolata basata su una colonna di tipo definito dall'utenteCreating a computed column based on a user-defined type column

Nell'esempio seguente viene creata una tabella con una colonna di tipo definito dall'utente utf8string presupponendo che l'assembly del tipo e il tipo stesso siano già stati creati nel database corrente.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. Una seconda colonna viene definita in base utf8stringe Usa metodo ToString() di type(class) utf8string per calcolare un valore per la colonna.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. Utilizzo della funzione USER_NAME per una colonna calcolataUsing the USER_NAME function for a computed column

Nell'esempio seguente viene utilizzata la funzione USER_NAME() nella colonna 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. Creazione di una tabella con una colonna FILESTREAMCreating a table that has a FILESTREAM column

Nell'esempio seguente viene creata una tabella con una colonna FILESTREAM Photo.The following example creates a table that has a FILESTREAM column Photo. Se in una tabella sono presenti una o più colonne FILESTREAM, tale tabella deve includere anche una colonna 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. Creazione di una tabella che utilizza la compressione di rigaCreating a table that uses row compression

Nell'esempio seguente viene creata una tabella che utilizza la compressione di riga.The following example creates a table that uses row compression.

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

Per esempi sulla compressione dei dati aggiuntivi, vedere la compressione dei dati.For additional data compression examples, see Data Compression.

O.O. Creazione di una tabella con colonne di tipo sparse e un set di colonneCreating a table that has sparse columns and a column set

Negli esempi seguenti viene illustrato come creare una tabella con una colonna di tipo sparse e una tabella con due colonne di tipo sparse e un set di colonne.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. Negli esempi viene utilizzata la sintassi di base.The examples use the basic syntax. Per esempi più complessi, vedere utilizzare le colonne di tipo Sparse e usare set di colonne.For more complex examples, see Use Sparse Columns and Use Column Sets.

Nell'esempio viene creata una tabella con una colonna di tipo sparse.This example creates a table that has a sparse column.

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

In questo esempio viene creata una tabella con due colonne di tipo sparse e un set di colonne denominato 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. Creazione di una tabella di temporale con controllo delle versioni del sistema basata su discoCreating a system-versioned disk-based temporal table

Si applica a: SQL Server 2016SQL Server 2016 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and Database SQL di AzureAzure SQL Database.

Gli esempi seguenti mostrano come creare una tabella temporale collegata a una nuova tabella di cronologia e come creare una tabella temporale collegata a una tabella di cronologia esistente.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. Si noti che la tabella temporale deve avere una chiave primaria definita per poter essere abilitato per la tabella deve essere abilitata per il controllo delle versioni di sistema.Note that the temporal table must have a primary key defined to be enabled for the table to be enabled for system versioning. Per esempi che illustra come aggiungere o rimuovere il controllo delle versioni di sistema in una tabella esistente, vedere controllo delle versioni di sistema in esempi.For examples showing how to add or remove system versioning on an existing table, see System Versioning in Examples. Per casi di utilizzo, vedere le tabelle temporali.For use cases, see Temporal Tables.

Questo esempio crea una nuova tabella temporale collegata a una nuova tabella di cronologia.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);  

Questo esempio crea una nuova tabella temporale collegata a una tabella di cronologia esistente.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. Creazione di una tabella di temporale con controllo delle versioni del sistema con ottimizzazione per la memoriaCreating a system-versioned memory-optimized temporal table

Si applica a: SQL Server 2016SQL Server 2016 tramite SQL Server 2017SQL Server 2017 e Database SQL di AzureAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and Database SQL di AzureAzure SQL Database.

Nell'esempio seguente viene illustrato come creare una controllo delle versioni di sistema con ottimizzazione per la memoria tabella temporale collegata a una nuova tabella di cronologia basata su disco.The following example shows how to create a system-versioned memory-optimized temporal table linked to a new disk-based history table.

Questo esempio crea una nuova tabella temporale collegata a una nuova tabella di cronologia.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 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   
    (  
        MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA,  
            SYSTEM_VERSIONING = ON ( HISTORY_TABLE = History.DepartmentHistory )   
    );  

Questo esempio crea una nuova tabella temporale collegata a una tabella di cronologia esistente.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. Creazione di una tabella con colonne crittografateCreating a table with encrypted columns

Nell'esempio seguente viene creata una tabella con due colonne crittografate.The following example creates a table with two encrypted columns. Per altre informazioni, vedere Always Encrypted (Motore di database).For more information, see Always Encrypted (Database Engine).

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. Creare un indice filtrato inlineCreate an inline filtered index

Crea una tabelle con un indice filtrato inline.Creates a tables with an inline filtered index.

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

Vedere ancheSee Also

ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
COLUMNPROPERTY ( Transact-SQL ) COLUMNPROPERTY (Transact-SQL)
CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
CREATE VIEW (Transact-SQL) CREATE VIEW (Transact-SQL)
Tipi di dati (Transact-SQL) Data Types (Transact-SQL)
DROP INDEX ( Transact-SQL ) DROP INDEX (Transact-SQL)
sys.dm_sql_referenced_entities (Transact-SQL) sys.dm_sql_referenced_entities (Transact-SQL)
sys.dm_sql_referencing_entities (Transact-SQL) sys.dm_sql_referencing_entities (Transact-SQL)
DROP TABLE ( Transact-SQL ) DROP TABLE (Transact-SQL)
CREATE PARTITION FUNCTION (Transact-SQL) CREATE PARTITION FUNCTION (Transact-SQL)
CREATE PARTITION SCHEME (Transact-SQL) CREATE PARTITION SCHEME (Transact-SQL)
CREATE TYPE (Transact-SQL) CREATE TYPE (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
sp_help (Transact-SQL) sp_help (Transact-SQL)
sp_helpconstraint ( Transact-SQL ) sp_helpconstraint (Transact-SQL)
sp_rename (Transact-SQL) sp_rename (Transact-SQL)
sp_spaceused ( Transact-SQL )sp_spaceused (Transact-SQL)