CREATE TABLE (Azure SQL Data Warehouse)CREATE TABLE (Azure SQL Data Warehouse)

SI APPLICA A: noSQL Server noDatabase SQL di Azure sìAzure SQL Data Warehouse sìParallel Data Warehouse APPLIES TO: noSQL Server noAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Crea una nuova tabella in SQL Data WarehouseSQL Data Warehouse o Parallel Data WarehouseParallel Data Warehouse.Creates a new table in SQL Data WarehouseSQL Data Warehouse or Parallel Data WarehouseParallel Data Warehouse.

Per comprendere le tabelle e il relativo utilizzo, vedere Tabelle in SQL Data Warehouse.To understand tables and how to use them, see Tables in SQL Data Warehouse.

Nota

le discussioni su SQL Data Warehouse in questo articolo si applicano sia a SQL Data Warehouse, sia a Parallel Data Warehouse, se non diversamente specificato.Discussions about SQL Data Warehouse in this article apply to both SQL Data Warehouse and Parallel Data Warehouse unless otherwise noted.

Icona di collegamento a un articoloConvenzioni della sintassi Transact-SQLArticle link icon Transact-SQL Syntax Conventions

SintassiSyntax

-- Create a new table.
CREATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( 
      { column_name <data_type>  [ <column_options> ] } [ ,...n ]
    )  
    [ WITH ( <table_option> [ ,...n ] ) ]  
[;]  

<column_options> ::=
    [ COLLATE Windows_collation_name ]  
    [ NULL | NOT NULL ] -- default is NULL  
    [ [ CONSTRAINT constraint_name ] DEFAULT constant_expression  ]
  
<table_option> ::=
    {
        <cci_option> --default for Azure SQL Data Warehouse
      | HEAP --default for Parallel Data Warehouse
      | CLUSTERED INDEX ( { index_column_name [ ASC | DESC ] } [ ,...n ] ) -- default is ASC
    }  
    {
        DISTRIBUTION = HASH ( distribution_column_name )
      | DISTRIBUTION = ROUND_ROBIN -- default for SQL Data Warehouse
      | DISTRIBUTION = REPLICATE -- default for Parallel Data Warehouse
    }
    | PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] -- default is LEFT  
        FOR VALUES ( [ boundary_value [,...n] ] ) )

<cci_option> ::= [CLUSTERED COLUMNSTORE INDEX] [ORDER (column [,…n])]
  
<data type> ::=
      datetimeoffset [ ( n ) ]  
    | datetime2 [ ( n ) ]  
    | datetime  
    | smalldatetime  
    | date  
    | time [ ( n ) ]  
    | float [ ( n ) ]  
    | real [ ( n ) ]  
    | decimal [ ( precision [ , scale ] ) ]   
    | numeric [ ( precision [ , scale ] ) ]   
    | money  
    | smallmoney  
    | bigint  
    | int   
    | smallint  
    | tinyint  
    | bit  
    | nvarchar [ ( n | max ) ]  -- max applies only to SQL Data Warehouse 
    | nchar [ ( n ) ]  
    | varchar [ ( n | max )  ] -- max applies only to SQL Data Warehouse  
    | char [ ( n ) ]  
    | varbinary [ ( n | max ) ] -- max applies only to SQL Data Warehouse  
    | binary [ ( n ) ]  
    | uniqueidentifier  

ArgomentiArguments

database_namedatabase_name
Nome del database in cui sarà contenuta la nuova tabella.The name of the database that will contain the new table. Il valore predefinito è il database attuale.The default is the current database.

schema_nameschema_name
Schema della tabella.The schema for the table. Specificare lo schema è facoltativo.Specifying schema is optional. Se si omette, verrà usato lo schema predefinito.If blank, the default schema will be used.

table_nametable_name
Nome della nuova tabella.The name of the new table. Per creare una tabella temporanea locale, anteporre # al nome della tabella.To create a local temporary table, precede the table name with #. Per spiegazioni e informazioni sulle tabelle temporanee, vedere Tabelle temporanee in Azure SQL Data Warehouse.For explanations and guidance on temporary tables, see Temporary tables in Azure SQL Data Warehouse.

column_namecolumn_name
Nome di una colonna di tabella.The name of a table column.

Opzioni delle colonneColumn options

COLLATE Windows_collation_nameCOLLATE Windows_collation_name
Specifica le regole di confronto per l'espressione.Specifies the collation for the expression. È necessario specificare una delle regole di confronto di Windows supportate da SQL ServerSQL Server.The collation must be one of the Windows collations supported by SQL ServerSQL Server. Per un elenco delle regole di confronto di Windows supportate da SQL ServerSQL Server, vedere Regole di confronto di Windows (Transact-SQL).For a list of Windows collations supported by SQL ServerSQL Server, see Windows Collation Name (Transact-SQL)/).

NULL | NOT NULL
Specifica se i valori NULL sono consentiti nella colonna.Specifies whether NULL values are allowed in the column. Il valore predefinito è NULL.The default is NULL.

[ CONSTRAINT constraint_name ] DEFAULT constant_expression[ CONSTRAINT constraint_name ] DEFAULT constant_expression
Specifica il valore di colonna predefinito.Specifies the default column value.

ArgomentoArgument SpiegazioneExplanation
constraint_nameconstraint_name Nome facoltativo per il vincolo.The optional name for the constraint. Il nome del vincolo è univoco all'interno del database.The constraint name is unique within the database. Può essere usato nuovamente in altri database.The name can be reused in other databases.
constant_expressionconstant_expression Il valore predefinito per la colonna.The default value for the column. L'espressione deve essere un valore letterale o una costante.The expression must be a literal value or a constant. Ad esempio, queste espressioni costanti sono consentite: 'CA', 4.For example, these constant expressions are allowed: 'CA', 4. Queste espressioni costanti non sono consentite: 2+3, CURRENT_TIMESTAMP.These constant expressions aren't allowed: 2+3, CURRENT_TIMESTAMP.

Opzioni della struttura di tabellaTable structure options

Per indicazioni sulla scelta del tipo di tabella, vedere Indicizzazione di tabelle in Azure SQL Data Warehouse.For guidance on choosing the type of table, see Indexing tables in Azure SQL Data Warehouse.

CLUSTERED COLUMNSTORE INDEX

Archivia la tabella come indice columnstore cluster.Stores the table as a clustered columnstore index. L'indice columnstore cluster viene applicato a tutti i dati della tabella.The clustered columnstore index applies to all of the table data. Questo comportamento è quello predefinito per SQL Data WarehouseSQL Data Warehouse.This behavior is the default for SQL Data WarehouseSQL Data Warehouse.

HEAP Archivia la tabella come heap.HEAP Stores the table as a heap. Questo comportamento è quello predefinito per Parallel Data WarehouseParallel Data Warehouse.This behavior is the default for Parallel Data WarehouseParallel Data Warehouse.

CLUSTERED INDEX ( index_column_name [ ,...n ] )CLUSTERED INDEX ( index_column_name [ ,...n ] )
Archivia la tabella come indice cluster con una o più colonne chiave.Stores the table as a clustered index with one or more key columns. Questo comportamento archivia i dati per riga.This behavior stores the data by row. Usare index_column_name per specificare il nome di una o più colonne chiave nell'indice.Use index_column_name to specify the name of one or more key columns in the index. Per altre informazioni, vedere le tabelle rowstore nella sezione Osservazioni generali.For more information, see Rowstore Tables in the General Remarks.

LOCATION = USER_DB Questa opzione è deprecata.LOCATION = USER_DB This option is deprecated. Sintatticamente viene accettata, ma non è più richiesta e non influisce sul comportamento.It's syntactically accepted, but no longer required and no longer affects behavior.

Opzioni di distribuzione della tabellaTable distribution options

Per capire come scegliere il metodo di distribuzione migliore e usare le tabelle distribuite, vedere Distribuzione di tabelle in Azure SQL Data Warehouse.To understand how to choose the best distribution method and use distributed tables, see Distributing tables in Azure SQL Data Warehouse.

DISTRIBUTION = HASH ( distribution_column_name ) Assegna ogni riga a una distribuzione eseguendo l'hashing del valore archiviato distribution_column_name.DISTRIBUTION = HASH ( distribution_column_name ) Assigns each row to one distribution by hashing the value stored in distribution_column_name. L'algoritmo è deterministico, ovvero l'hashing viene sempre eseguito sullo stesso valore per la stessa distribuzione.The algorithm is deterministic, which means it always hashes the same value to the same distribution. La colonna di distribuzione deve essere definita come NOT NULL perché tutte le righe con NULL vengono assegnate alla stessa distribuzione.The distribution column should be defined as NOT NULL because all rows that have NULL are assigned to the same distribution.

DISTRIBUTION = ROUND_ROBIN Distribuisce le righe in modo uniforme tra tutte le distribuzioni secondo uno schema round robin.DISTRIBUTION = ROUND_ROBIN Distributes the rows evenly across all the distributions in a round-robin fashion. Questo comportamento è quello predefinito per SQL Data WarehouseSQL Data Warehouse.This behavior is the default for SQL Data WarehouseSQL Data Warehouse.

DISTRIBUTION = REPLICATE Archivia una copia della tabella in ogni nodo di calcolo.DISTRIBUTION = REPLICATE Stores one copy of the table on each Compute node. Per SQL Data WarehouseSQL Data Warehouse la tabella è archiviata in un database di distribuzione in ogni nodo di calcolo.For SQL Data WarehouseSQL Data Warehouse the table is stored on a distribution database on each Compute node. Per Parallel Data WarehouseParallel Data Warehouse la tabella è archiviata in un filegroup SQL ServerSQL Server che si estende oltre il nodo di calcolo.For Parallel Data WarehouseParallel Data Warehouse, the table is stored in a SQL ServerSQL Server filegroup that spans the Compute node. Questo comportamento è quello predefinito per Parallel Data WarehouseParallel Data Warehouse.This behavior is the default for Parallel Data WarehouseParallel Data Warehouse.

Opzioni di partizione della tabellaTable partition options

Per informazioni sull'uso delle partizioni di tabella, vedere l'articolo sul partizionamento delle tabelle in SQL Data Warehouse.For guidance on using table partitions, see Partitioning tables in SQL Data Warehouse.

PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] FOR VALUES ( [ boundary_value [,...n] ] ))PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] FOR VALUES ( [ boundary_value [,...n] ] ))
Crea una o più partizioni di tabella.Creates one or more table partitions. Queste partizioni sono porzioni orizzontali della tabella che consentono di applicare operazioni a subset di righe, indipendentemente dal fatto che la tabella sia archiviata come heap, indice cluster o indice columnstore cluster.These partitions are horizontal table slices that allow you to apply operations to subsets of rows regardless of whether the table is stored as a heap, clustered index, or clustered columnstore index. A differenza della colonna di distribuzione, le partizioni della tabella non determinano la distribuzione in cui viene archiviata ogni riga.Unlike the distribution column, table partitions don't determine the distribution where each row is stored. Le partizioni della tabella determinano invece il modo in cui le righe vengono raggruppate e archiviate all'interno di ogni distribuzione.Instead, table partitions determine how the rows are grouped and stored within each distribution.

ArgomentoArgument SpiegazioneExplanation
partition_column_namepartition_column_name Specifica la colonna che verrà usata da SQL Data WarehouseSQL Data Warehouse per suddividere le righe in partizioni.Specifies the column that SQL Data WarehouseSQL Data Warehouse will use to partition the rows. Questa colonna può essere qualsiasi tipo di dati.This column can be any data type. SQL Data WarehouseSQL Data Warehouse ordina i valori della colonna di partizione in ordine crescente.sorts the partition column values in ascending order. L'ordinamento dal basso verso l'alto va da LEFT a RIGHT nella specifica RANGE.The low-to-high ordering goes from LEFT to RIGHT in the RANGE specification.
RANGE LEFT Specifica che il valore limite appartiene alla partizione a sinistra (i valori più bassi).Specifies the boundary value belongs to the partition on the left (lower values). Il valore predefinito è LEFT.The default is LEFT.
RANGE RIGHT Specifica che il valore limite appartiene alla partizione a destra (i valori più alti).Specifies the boundary value belongs to the partition on the right (higher values).
FOR VALUES ( boundary_value [,...n] )FOR VALUES ( boundary_value [,...n] ) Specifica i valori limite per la partizione.Specifies the boundary values for the partition. boundary_value è un'espressione costante.boundary_value is a constant expression. Non può essere NULL.It can't be NULL. Deve corrispondere o essere convertibile in modo implicito nel tipo di dati di partition_column_name.It must either match or be implicitly convertible to the data type of partition_column_name. Non può essere troncata durante la conversione implicita in modo che la dimensione e la scalabilità del valore non corrispondano al tipo di dati di partition_column_nameIt can't be truncated during implicit conversion so that the size and scale of the value don't match the data type of partition_column_name

Se si specifica la clausola PARTITION, ma non si specifica un valore limite, SQL Data WarehouseSQL Data Warehouse crea una tabella partizionata con una sola partizione.If you specify the PARTITION clause, but don't specify a boundary value, SQL Data WarehouseSQL Data Warehouse will create a partitioned table with one partition. Se applicabile, è possibile suddividere la tabella in due partizioni in un secondo momento.If applicable, you can split the table into two partitions at a later time.

Se si specifica un valore limite, la tabella risultante ha due partizioni: una per i valori inferiori al valore limite e una per i valori superiori al valore limite.If you specify one boundary value, the resulting table has two partitions; one for the values lower than the boundary value and one for the values higher than the boundary value. Se si sposta una partizione in una tabella non partizionata, la tabella non partizionata riceverà i dati, ma non avrà i limiti della partizione nei metadati.If you move a partition into a non-partitioned table, the non-partitioned table will receive the data, but will not have the partition boundaries in its metadata.

Vedere Creare una tabella partizionata nella sezione Esempi.See Create a partitioned table in the Examples section.

Opzione Indice columnstore cluster ordinato (anteprima per Azure SQL Data Warehouse)Ordered Clustered columnstore index option (Preview for Azure SQL Data Warehouse)

Indice columnstore cluster è l'opzione predefinita per la creazione di tabelle in Azure SQL Data Warehouse.Clustered columnstore index is the default for creating tables in Azure SQL Data Warehouse. La specifica ORDER prevede sempre chiavi di tipo COMPOUND.The ORDER specification defaults to COMPOUND keys. L'ordinamento sarà sempre in ordine crescente.Sorting will always be ascending order. Se non è specificata una clausola ORDER, l'indice columnstore non verrà ordinato.If no ORDER clause is specified, columnstore will not be sorted. A causa del processo di ordinamento, una tabella con indici columnstore cluster ordinati potrebbe richiedere tempi di caricamento dei dati più lunghi rispetto agli indici columnstore cluster non ordinati.Due to the ordering process, a table with ordered clustered columnstore index may experience longer data loading times than non-ordered clustered columnstore indexes. Se è necessario più spazio di tempdb durante il caricamento dei dati, è possibile ridurre la quantità di dati per ogni istruzione INSERT.If you need more tempdb space while loading data, you can decrease the amount of data per insert.

Durante l'anteprima, è possibile eseguire questa query per verificare le colonne in cui è abilitata la clausola ORDER.During preview, you can run this query to check the column(s) with ORDER enabled.

SELECT i.name AS index_name  
    ,COL_NAME(ic.object_id,ic.column_id) AS column_name  
    ,ic.index_column_id  
    ,ic.key_ordinal  
,ic.is_included_column  
FROM sys.indexes AS i  
INNER JOIN sys.index_columns AS ic
    ON i.object_id = ic.object_id AND i.index_id = ic.index_id  

Tipo di datiData type

SQL Data WarehouseSQL Data Warehouse supporta i tipi di dati di uso più comune.supports the most commonly used data types. Di seguito è riportato un elenco dei tipi di dati supportati con i relativi dettagli e byte per l'archiviazione.Below is a list of the supported data types along with their details and storage bytes. Per comprendere meglio i tipi di dati e le relative modalità di utilizzo, vedere Tipi di dati di tabella in Azure SQL Data Warehouse.To better understand data types and how to use them, see Data types for tables in SQL Data Warehouse.

Per una tabella delle conversioni di tipi di dati, vedere la sezione relativa alle conversioni implicite in CAST e CONVERT (Transact-SQL).For a table of data type conversions, see the Implicit Conversions section, of CAST and CONVERT (Transact-SQL).

datetimeoffset [ ( n ) ]datetimeoffset [ ( n ) ]
Il valore predefinito di n è 7.The default value for n is 7.

datetime2 [ ( n ) ]datetime2 [ ( n ) ]
Come per datetime, ad eccezione del fatto che è possibile specificare il numero di secondi frazionari.Same as datetime, except that you can specify the number of fractional seconds. Il valore predefinito di n è 7.The default value for n is 7.

Valore nn value PrecisionePrecision ScalaScale
0 1919 00
1 2121 11
2 2222 22
3 2323 33
4 2424 44
5 2525 55
6 2626 66
7 2727 77

datetime
Archivia data e ora del giorno con 19-23 caratteri in base al calendario gregoriano.Stores date and time of day with 19 to 23 characters according to the Gregorian calendar. La data può contenere anno, mese e giorno.The date can contain year, month, and day. L'ora contiene ora, minuti e secondi. In alternativa, è possibile visualizzare tre cifre per i secondi frazionari.The time contains hour, minutes, seconds.As an option, you can display three digits for fractional seconds. Le dimensioni di archiviazione sono di 8 byte.The storage size is 8 bytes.

smalldatetime
Archivia una data e un'ora.Stores a date and a time. La dimensione dello spazio di archiviazione è 4 byte.Storage size is 4 bytes.

date
Archivia una data usando un massimo di 10 caratteri per anno, mese e giorno in base al calendario gregoriano.Stores a date using a maximum of 10 characters for year, month, and day according to the Gregorian calendar. La dimensione dello spazio di archiviazione è 3 byte.The storage size is 3 bytes. La data viene archiviata come numero intero.Date is stored as an integer.

time [ ( n ) ]time [ ( n ) ]
Il valore predefinito di n è 7.The default value for n is 7.

float [ ( n ) ]float [ ( n ) ]
Tipo di dati numerici approssimati da usare con dati numerici a virgola mobile.Approximate number data type for use with floating point numeric data. I dati a virgola mobile sono approssimati, ovvero non tutti i valori nell'intervallo del tipo di dati possono essere rappresentati in modo esatto.Floating point data is approximate, which means that not all values in the data type range can be represented exactly. n specifica il numero di bit usati per archiviare la mantissa di float in notazione scientifica.n specifies the number of bits used to store the mantissa of the float in scientific notation. n determina la precisione e la dimensione dello spazio di archiviazione.n dictates the precision and storage size. Se si specifica n, il valore deve essere compreso tra 1 e 53.If n is specified, it must be a value between 1 and 53. Il valore predefinito di n è 53.The default value of n is 53.

Valore nn value PrecisionePrecision Dimensioni dello spazio di archiviazioneStorage size
1-241-24 7 cifre7 digits 4 byte4 bytes
25-5325-53 15 cifre15 digits 8 byte8 bytes

SQL Data WarehouseSQL Data Warehouse interpreta n come uno dei due valori possibili.treats n as one of two possible values. Se 1<= n <= 24, n viene interpretato come 24.If 1<= n <= 24, n is treated as 24. Se 25 <= n <= 53, n viene interpretato come 53.If 25 <= n <= 53, n is treated as 53.

Il tipo di dati SQL Data WarehouseSQL Data Warehouse float è conforme allo standard ISO per tutti i valori di n da 1 a 53.The SQL Data WarehouseSQL Data Warehouse float data type complies with the ISO standard for all values of n from 1 through 53. Il sinonimo per double precision è float(53).The synonym for double precision is float(53).

real [ ( n ) ]real [ ( n ) ]
La definizione di reale è la stessa di float.The definition of real is the same as float. Il sinonimo di ISO per real è float(24).The ISO synonym for real is float(24).

decimal [ ( precision [ , scale ] ) ] | numeric [ ( precision [ , scale ] ) ]decimal [ ( precision [ , scale ] ) ] | numeric [ ( precision [ , scale ] ) ]
Archivia numeri con precisione e scala fisse.Stores fixed precision and scale numbers.

precisioneprecision
Numero massimo totale di cifre decimali che è possibile archiviare, sia a destra che a sinistra del separatore decimale.The maximum total number of decimal digits that can be stored, both to the left and to the right of the decimal point. La precisione deve essere un valore compreso tra 1 e la precisione massima di 38.The precision must be a value from 1 through the maximum precision of 38. La precisione predefinita è 18.The default precision is 18.

scalascale
Numero massimo di cifre decimali che è possibile archiviare a destra del separatore decimale.The maximum number of decimal digits that can be stored to the right of the decimal point. Scale deve essere un valore compreso tra 0 e precision.Scale must be a value from 0 through precision. È possibile specificare scale solo se precision è specificato.You can only specify scale if precision is specified. La scalabilità predefinita è 0 e quindi 0 <= scale <= precision.The default scale is 0 and so 0 <= scale <= precision. Le dimensioni massime di archiviazione variano a seconda della precisione.Maximum storage sizes vary, based on the precision.

PrecisionePrecision Byte per l'archiviazioneStorage bytes
1-91-9 55
10-1910-19 99
20-2820-28 1313
29-3829-38 1717

money | smallmoney
Tipi di dati che rappresentano valori di valuta.Data types that represent currency values.

Tipo di datiData Type Byte per l'archiviazioneStorage bytes
money 88
smallmoney 44

bigint | int | smallint | tinyint
Tipi di dati numerici esatti che utilizzano dati integer.Exact-number data types that use integer data. La risorsa di archiviazione è illustrata nella tabella seguente.The storage is shown in the following table.

Tipo di datiData Type Byte per l'archiviazioneStorage bytes
bigint 88
int 44
smallint 22
tinyint 11

bit
Tipo di dati integer che può accettare un valore di 1, 0 o NULL.An integer data type that can take the value of 1, 0, or `NULL. SQL Data WarehouseSQL Data Warehouse ottimizza l'archiviazione delle colonne di tipo bit.optimizes storage of bit columns. Se una tabella contiene al massimo 8 colonne di tipo bit, le colonne vengono archiviate come singolo byte.If there are 8 or fewer bit columns in a table, the columns are stored as 1 byte. Se la tabella contiene da 9 a 16 colonne di tipo bit, le colonne vengono archiviate come due byte e così via.If there are from 9-16 bit columns, the columns are stored as 2 bytes, and so on.

nvarchar [ ( n | max ) ] -- max si applica solo a SQL Data WarehouseSQL Data Warehouse.nvarchar [ ( n | max ) ] -- max applies only to SQL Data WarehouseSQL Data Warehouse.
Dati Unicode di tipo carattere a lunghezza variabile.Variable-length Unicode character data. n può essere un valore compreso tra 1 e 4000.n can be a value from 1 through 4000. Tramite max viene indicato che la capacità di memorizzazione massima è di 2^31-1 byte (2 GB).max indicates that the maximum storage size is 2^31-1 bytes (2 GB). Le dimensioni in byte dello spazio di archiviazione sono pari al doppio del numero di caratteri immessi + 2 byte.Storage size in bytes is two times the number of characters entered + 2 bytes. La lunghezza dei dati immessi può essere uguale a zero caratteri.The data entered can be zero characters in length.

nchar [ ( n ) ]nchar [ ( n ) ]
Dati di tipo carattere Unicode a lunghezza fissa con una lunghezza di n caratteri.Fixed-length Unicode character data with a length of n characters. n deve essere un valore compreso tra 1 e 4000.n must be a value from 1 through 4000. Le dimensioni di archiviazione, espresse in byte, sono pari al doppio di n.The storage size is two times n bytes.

varchar [ ( n | max ) ] -- max si applica solo a SQL Data WarehouseSQL Data Warehouse.varchar [ ( n | max ) ] -- max applies only to SQL Data WarehouseSQL Data Warehouse.
Dati di tipo carattere non Unicode a lunghezza variabile con una lunghezza di n byte.Variable-length, non-Unicode character data with a length of n bytes. ndeve essere un valore compreso tra 1 e 8000.n must be a value from 1 to 8000. max indica che le dimensioni massime dello spazio di archiviazione sono 2^31-1 byte (2 GB). Le dimensioni dello spazio di archiviazione sono la lunghezza effettiva dei dati immessi + 2 byte.max indicates that the maximum storage size is 2^31-1 bytes (2 GB).The storage size is the actual length of data entered + 2 bytes.

char [ ( n ) ]char [ ( n ) ]
Dati di tipo carattere non Unicode a lunghezza fissa con una lunghezza di n byte.Fixed-length, non-Unicode character data with a length of n bytes. ndeve essere un valore compreso tra 1 e 8000.n must be a value from 1 to 8000. Le dimensioni di archiviazione corrispondono a n byte.The storage size is n bytes. L'impostazione predefinita per n è 1.The default for n is 1.

varbinary [ ( n | max ) ] -- max si applica solo a SQL Data WarehouseSQL Data Warehouse.varbinary [ ( n | max ) ] -- max applies only to SQL Data WarehouseSQL Data Warehouse.
Dati binary a lunghezza variabile.Variable-length binary data. n può essere un valore compreso tra 1 e 8000.n can be a value from 1 to 8000. Tramite max viene indicato che la capacità di memorizzazione massima è di 2^31-1 byte (2 GB).max indicates that the maximum storage size is 2^31-1 bytes (2 GB). Le dimensioni di archiviazione sono pari all'effettiva lunghezza dei dati immessi + 2 byte.The storage size is the actual length of data entered + 2 bytes. Il valore predefinito di n è 7.The default value for n is 7.

binary [ ( n ) ]binary [ ( n ) ]
Dati binari a lunghezza fissa con lunghezza di n byte.Fixed-length binary data with a length of n bytes. n può essere un valore compreso tra 1 e 8000.n can be a value from 1 to 8000. Le dimensioni di archiviazione corrispondono a n byte.The storage size is n bytes. Il valore predefinito di n è 7.The default value for n is 7.

uniqueidentifier
GUID a 16 byte.Is a 16-byte GUID.

AutorizzazioniPermissions

La creazione di una tabella richiede l'autorizzazione nel ruolo predefinito del database db_ddladmin o:Creating a table requires permission in the db_ddladmin fixed database role, or:

  • Autorizzazione CREATE TABLE per il databaseCREATE TABLE permission on the database
  • Autorizzazione ALTER SCHEMA per lo schema che conterrà la tabella.ALTER SCHEMA permission on the schema that will contain the table.

La creazione di una tabella partizionata richiede l'autorizzazione nel ruolo predefinito del database db_ddladmin oCreating a partitioned table requires permission in the db_ddladmin fixed database role, or

  • l'autorizzazione ALTER ANY DATASPACEALTER ANY DATASPACE permission

L'account di accesso che crea una tabella temporanea locale riceve le autorizzazioni CONTROL, INSERT, SELECT e UPDATE per la tabella.The login that creates a local temporary table receives CONTROL, INSERT, SELECT, and UPDATE permissions on the table.

Osservazioni generaliGeneral Remarks

Per i limiti minimi e massimi, vedere Limiti di capacità di SQL Data Warehouse.For minimum and maximum limits, see SQL Data Warehouse capacity limits.

Determinazione del numero di partizioni della tabellaDetermining the number of table partitions

Ogni tabella definita dall'utente è suddivisa in tabelle più piccole che vengono archiviate in percorsi separati detti distribuzioni.Each user-defined table is divided into multiple smaller tables that are stored in separate locations called distributions. SQL Data WarehouseSQL Data Warehouse usa 60 distribuzioni.uses 60 distributions. In Parallel Data WarehouseParallel Data Warehouse il numero di distribuzioni dipende dal numero di nodi di calcolo.In Parallel Data WarehouseParallel Data Warehouse, the number of distributions depends on the number of Compute nodes.

Ogni distribuzione contiene tutte le partizioni della tabella.Each distribution contains all table partitions. Ad esempio, se sono presenti 60 distribuzioni e quattro partizioni di tabella oltre a una partizione vuota, vi saranno 300 partizioni (5 x 60= 300).For example, if there are 60 distributions and four table partitions plus one empty partition, there will be 300 partitions (5 x 60= 300). Se la tabella è un indice columnstore cluster, esisterà un solo indice columnstore per partizione, ovvero saranno disponibili 300 indici columnstore.If the table is a clustered columnstore index, there will be one columnstore index per partition, which means you'll have 300 columnstore indexes.

Si consiglia di usare un numero inferiore di partizioni di tabella per garantire che ogni indice columnstore abbia righe a sufficienza per poter sfruttare i vantaggi degli indici columnstore.We recommend using fewer table partitions to ensure each columnstore index has enough rows to take advantage of the benefits of columnstore indexes. Per altre informazioni, vedere Partizionamento delle tabelle in SQL Data Warehouse e Indicizzazione di tabelle in SQL Data WarehouseFor more information, see Partitioning tables in SQL Data Warehouse and Indexing tables in SQL Data Warehouse

Tabella rowstore (heap o indice cluster)Rowstore table (heap or clustered index)

Una tabella rowstore è una tabella archiviata in ordine riga per riga.A rowstore table is a table stored in row-by-row order. Può essere un heap o un indice cluster.It's a heap or clustered index. SQL Data WarehouseSQL Data Warehouse crea tutte le tabelle rowstore con la compressione della pagina. Questo comportamento non è configurabile dall'utente.creates all rowstore tables with page compression; this behavior isn't user-configurable.

Tabella columnstore (indice columnstore)Columnstore table (columnstore index)

Una tabella columnstore è una tabella archiviata in ordine colonna per colonna.A columnstore table is a table stored in column-by-column order. L'indice columnstore è la tecnologia che gestisce i dati archiviati in una tabella columnstore.The columnstore index is the technology that manages data stored in a columnstore table. L'indice columnstore cluster non influisce sul modo in cui vengono distribuiti i dati, ma su come i dati vengono archiviati all'interno di ogni distribuzione.The clustered columnstore index doesn't affect how data are distributed, rather, it affects how the data are stored within each distribution.

Per modificare una tabella rowstore in una tabella columnstore, eliminare tutti gli indici esistenti dalla tabella e creare un indice columnstore cluster.To change a rowstore table to a columnstore table, drop all existing indexes on the table and create a clustered columnstore index. Per un esempio, vedere CREATE COLUMNSTORE INDEX (Transact-SQL).For an example, see CREATE COLUMNSTORE INDEX (Transact-SQL).

Per altre informazioni, vedere gli articoli seguenti:For more information, see these articles:

Limitazioni e restrizioniLimitations and Restrictions

Non è possibile definire un vincolo DEFAULT per una colonna di distribuzione.You can't define a DEFAULT constraint on a distribution column.

PartizioniPartitions

Quando si usano le partizioni, la colonna di partizione non può contenere regole di confronto solo Unicode.When using partitions, the partition column can't have a Unicode-only collation. Ad esempio, l'istruzione seguente ha esito negativo.For example, the following statement fails.

CREATE TABLE t1 ( c1 varchar(20) COLLATE Divehi_90_CI_AS_KS_WS) WITH (PARTITION (c1 RANGE FOR VALUES (N'')))

Se boundary_value è un valore letterale che deve essere convertito in modo implicito nel tipo di dati in partition_column_name, si verificherà una discrepanza.If boundary_value is a literal value that must be implicitly converted to the data type in partition_column_name, a discrepancy will occur. Il valore letterale viene visualizzato nelle viste del sistema SQL Data WarehouseSQL Data Warehouse, ma il valore convertito viene utilizzato per le operazioni di Transact-SQLTransact-SQL.The literal value is displayed through the SQL Data WarehouseSQL Data Warehouse system views, but the converted value is used for Transact-SQLTransact-SQL operations.

Tabelle temporaneeTemporary tables

Le tabelle temporanee globali che iniziano con ## non sono supportate.Global temporary tables that begin with ## aren't supported.

Le tabelle temporanee locali presentano le seguenti limitazioni e restrizioni:Local temporary tables have the following limitations and restrictions:

  • Sono visibili solo per la sessione corrente.They're visible only to the current session. SQL Data WarehouseSQL Data Warehouse le elimina automaticamente alla fine della sessione.drops them automatically at the end of the session. Per eliminarle in modo esplicito, usare l'istruzione DROP TABLE.To drop them explicitly, use the DROP TABLE statement.
  • Non possono essere rinominate.They can't be renamed.
  • Non possono avere partizioni o viste.They can't have partitions or views.
  • Non è possibile modificarne le autorizzazioni.Their permissions can't be changed. Le istruzioni GRANT, DENY e REVOKE non possono essere usate con le tabelle temporanee locali.GRANT, DENY, and REVOKE statements can't be used with local temporary tables.
  • I comandi della console del database sono bloccati per le tabelle temporanee.Database console commands are blocked for temporary tables.
  • Se si usa più di una tabella temporanea locale all'interno di un batch, ogni tabella deve avere un nome univoco.If more than one local temporary table is used within a batch, each must have a unique name. Se più sessioni eseguono lo stesso batch e creano la stessa tabella temporanea locale, SQL Data WarehouseSQL Data Warehouse aggiunge internamente un suffisso numerico al nome della tabella temporanea locale per gestire un nome univoco per ogni tabella temporanea locale.If multiple sessions are running the same batch and creating the same local temporary table, SQL Data WarehouseSQL Data Warehouse internally appends a numeric suffix to the local temporary table name to maintain a unique name for each local temporary table.

Comportamento di bloccoLocking behavior

Acquisisce un blocco esclusivo per la tabella.Takes an exclusive lock on the table. Acquisisce un blocco condiviso per gli oggetti DATABASE, SCHEMA e SCHEMARESOLUTION.Takes a shared lock on the DATABASE, SCHEMA, and SCHEMARESOLUTION objects.

Esempi per le colonneExamples for columns

A.A. Specificare le regole di confronto a livello di colonnaSpecify a column collation

Nell'esempio seguente la tabella MyTable viene creata con due diverse regole di confronto per la colonna.In the following example, the table MyTable is created with two different column collations. Per impostazione predefinita, la colonna, mycolumn1, ha le regole di confronto predefinite Latin1_General_100_CI_AS_KS_WS.By default, the column, mycolumn1, has the default collation Latin1_General_100_CI_AS_KS_WS. La colonna mycolumn2 ha le regole di confronto Frisian_100_CS_AS.The column, mycolumn2 has the collation Frisian_100_CS_AS.

CREATE TABLE MyTable   
  (  
    mycolumnnn1 nvarchar,  
    mycolumn2 nvarchar COLLATE Frisian_100_CS_AS )  
WITH ( CLUSTERED COLUMNSTORE INDEX )  
;  

B.B. Specificare un vincolo DEFAULT per una colonnaSpecify a DEFAULT constraint for a column

L'esempio seguente illustra la sintassi che consente di specificare un valore predefinito per una colonna.The following example shows the syntax to specify a default value for a column. La colonna colA ha un vincolo predefinito denominato constraint_colA e un valore predefinito pari a 0.The colA column has a default constraint named constraint_colA and a default value of 0.

CREATE TABLE MyTable
  (  
    colA int CONSTRAINT constraint_colA DEFAULT 0,  
    colB nvarchar COLLATE Frisian_100_CS_AS
  )  
WITH ( CLUSTERED COLUMNSTORE INDEX )  
;  

C.C. Creare un indice columnstore cluster ordinatoCreate an ordered clustered columnstore index

L'esempio seguente mostra come creare un indice columnstore cluster ordinato.The following example shows how to create an ordered clustered columnstore index. L'indice è ordinato in base a SHIPDATE.The index is ordered on SHIPDATE.

CREATE TABLE Lineitem  
WITH (DISTRIBUTION = ROUND_ROBIN, CLUSTERED COLUMNSTORE INDEX ORDER(SHIPDATE))  
AS  
SELECT * FROM ext_Lineitem

Esempi per le tabelle temporaneeExamples for temporary tables

C.C. Creare una tabella temporanea localeCreate a local temporary table

L'esempio seguente crea una tabella temporanea locale denominata #myTable.The following example creates a local temporary table named #myTable. La tabella viene specificata con un nome in tre parti, che inizia con #.The table is specified with a three-part name, which starts with a #.

CREATE TABLE AdventureWorks.dbo.#myTable
  (  
   id int NOT NULL,  
   lastName varchar(20),  
   zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = HASH (id),  
    CLUSTERED COLUMNSTORE INDEX
  )  
;  

Esempi per la struttura della tabellaExamples for table structure

D.D. Creare una tabella con un indice columnstore clusterCreate a table with a clustered columnstore index

Nell'esempio seguente viene creata una tabella distribuita con un indice columnstore cluster.The following example creates a distributed table with a clustered columnstore index. Ogni distribuzione verrà archiviata come columnstore.Each distribution will be stored as a columnstore.

L'indice columnstore cluster non influisce sul modo in cui vengono distribuiti i dati. I dati vengono sempre distribuiti per riga.The clustered columnstore index doesn't affect how the data is distributed; data is always distributed by row. L'indice columnstore cluster influisce sul modo in cui vengono archiviati i dati all'interno di ogni distribuzione.The clustered columnstore index affects how the data is stored within each distribution.

  CREATE TABLE MyTable
  (  
    colA int CONSTRAINT constraint_colA DEFAULT 0,  
    colB nvarchar COLLATE Frisian_100_CS_AS
  )  
WITH   
  (   
    DISTRIBUTION = HASH ( colB ),  
    CLUSTERED COLUMNSTORE INDEX
  )  
;  

Esempi per la distribuzione della tabellaExamples for table distribution

E.E. Creare una tabella ROUND_ROBINCreate a ROUND_ROBIN table

L'esempio seguente crea una tabella ROUND_ROBIN con tre colonne e senza partizioni.The following example creates a ROUND_ROBIN table with three columns and without partitions. I dati vengono diffusi in tutte le distribuzioni.The data is spread across all distributions. La tabella viene creata con un indice columnstore cluster, che consente una migliore qualità delle prestazioni e della compressione dei dati rispetto a un heap o un indice rowstore cluster.The table is created with a CLUSTERED COLUMNSTORE INDEX, which gives better performance and data compression than a heap or rowstore clustered index.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH ( CLUSTERED COLUMNSTORE INDEX );  

F.F. Creare una tabella hash distribuitaCreate a hash-distributed table

Nell'esempio seguente viene creata la stessa tabella dell'esempio precedente.The following example creates the same table as the previous example. Tuttavia, per questa tabella le righe vengono distribuite (nella colonna id) anziché suddivise in modo casuale come una tabella ROUND_ROBIN.However, for this table, rows are distributed (on the id column) instead of randomly spread like a ROUND_ROBIN table. La tabella viene creata con un indice columnstore cluster, che consente una migliore qualità delle prestazioni e della compressione dei dati rispetto a un heap o un indice rowstore cluster.The table is created with a CLUSTERED COLUMNSTORE INDEX, which gives better performance and data compression than a heap or rowstore clustered index.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = HASH (id),   
    CLUSTERED COLUMNSTORE INDEX  
  );  

G.G. Creare una tabella replicataCreate a replicated table

L'esempio seguente crea una tabella replicata simile agli esempi precedenti.The following example creates a replicated table similar to the previous examples. Le tabelle replicate vengono copiate completamente in ogni nodo di calcolo.Replicated tables are copied in full to each Compute node. Con questa copia in ogni nodo di calcolo, lo spostamento dei dati viene ridotto per le query.With this copy on each Compute node, data movement is reduced for queries. Questo esempio viene creato con CLUSTERED INDEX, che offre una compressione dei dati migliore di quella di un heap.This example is created with a CLUSTERED INDEX, which gives better data compression than a heap. Un heap potrebbe non contenere righe sufficienti per eseguire una compressione CLUSTERED COLUMNSTORE INDEX valida.A heap may not contain enough rows to achieve good CLUSTERED COLUMNSTORE INDEX compression.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = REPLICATE,
    CLUSTERED INDEX (lastName)  
  );  

Esempi per le partizioni della tabellaExamples for table partitions

H.H. Creare una tabella partizionataCreate a partitioned table

L'esempio seguente crea la stessa tabella dell'esempio A, con l'aggiunta del partizionamento RANGE LEFT per la colonna id.The following example creates the same table as shown in example A, with the addition of RANGE LEFT partitioning on the id column. Specifica quattro valori limite per le partizioni, ottenendo cinque partizioni.It specifies four partition boundary values, which results in five partitions.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode int)  
WITH
  (
  
    PARTITION ( id RANGE LEFT FOR VALUES (10, 20, 30, 40 )),  
    CLUSTERED COLUMNSTORE INDEX
  )  
;  

In questo esempio i dati vengono ordinati nelle partizioni seguenti:In this example, data will be sorted into the following partitions:

  • Partizione 1: col <= 10Partition 1: col <= 10
  • Partizione 2: 10 < col <= 20Partition 2: 10 < col <= 20
  • Partizione 3: 20 < col <= 30Partition 3: 20 < col <= 30
  • Partizione 4: 30 < col <= 40Partition 4: 30 < col <= 40
  • Partizione 5: 40 < colPartition 5: 40 < col

Se questa stessa tabella viene partizionata RANGE RIGHT anziché RANGE LEFT (impostazione predefinita), i dati vengono ordinati nelle partizioni seguenti:If this same table was partitioned RANGE RIGHT instead of RANGE LEFT (default), the data will be sorted into the following partitions:

  • Partizione 1: col < 10Partition 1: col < 10
  • Partizione 2: 10 <= col < 20Partition 2: 10 <= col < 20
  • Partizione 3: 20 <= col < 30Partition 3: 20 <= col < 30
  • Partizione 4: 30 <= col < 40Partition 4: 30 <= col < 40
  • Partizione 5: 40 <= colPartition 5: 40 <= col

I.I. Creare una tabella partizionata con una partizioneCreate a partitioned table with one partition

L'esempio seguente crea una tabella partizionata con un'unica partizione.The following example creates a partitioned table with one partition. Non specifica valori limite e quindi si ottiene una sola partizione.It doesn't specify any boundary value, which results in one partition.

CREATE TABLE myTable (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode int)  
WITH
    (
      PARTITION ( id RANGE LEFT FOR VALUES ( )),  
      CLUSTERED COLUMNSTORE INDEX  
    )  
;  

J.J. Creare una tabella con partizionamento di dataCreate a table with date partitioning

L'esempio seguente crea una nuova tabella denominata myTable, con partizionamento per una colonna date.The following example creates a new table named myTable, with partitioning on a date column. Usando RANGE RIGHT e le date per i valori limite, inserisce un mese di dati in ogni partizione.By using RANGE RIGHT and dates for the boundary values, it puts a month of data in each partition.

CREATE TABLE myTable (  
    l_orderkey      bigint,
    l_partkey       bigint,
    l_suppkey       bigint,
    l_linenumber    bigint,
    l_quantity      decimal(15,2),  
    l_extendedprice decimal(15,2),  
    l_discount      decimal(15,2),  
    l_tax           decimal(15,2),  
    l_returnflag    char(1),  
    l_linestatus    char(1),  
    l_shipdate      date,  
    l_commitdate    date,  
    l_receiptdate   date,  
    l_shipinstruct  char(25),  
    l_shipmode      char(10),  
    l_comment       varchar(44))  
WITH
  (
    DISTRIBUTION = HASH (l_orderkey),  
    CLUSTERED COLUMNSTORE INDEX,  
    PARTITION ( l_shipdate  RANGE RIGHT FOR VALUES
      (  
        '1992-01-01','1992-02-01','1992-03-01','1992-04-01','1992-05-01',
        '1992-06-01','1992-07-01','1992-08-01','1992-09-01','1992-10-01',
        '1992-11-01','1992-12-01','1993-01-01','1993-02-01','1993-03-01',
        '1993-04-01','1993-05-01','1993-06-01','1993-07-01','1993-08-01',
        '1993-09-01','1993-10-01','1993-11-01','1993-12-01','1994-01-01',
        '1994-02-01','1994-03-01','1994-04-01','1994-05-01','1994-06-01',
        '1994-07-01','1994-08-01','1994-09-01','1994-10-01','1994-11-01',
        '1994-12-01'  
      ))
  );  

Vedere ancheSee also

CREATE TABLE AS SELECT (Azure SQL Data Warehouse) CREATE TABLE AS SELECT (Azure SQL Data Warehouse)
DROP TABLE (Transact-SQL) DROP TABLE (Transact-SQL)
ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
sys.index_columns (Transact-SQL)sys.index_columns (Transact-SQL)