Linee guida per la definizione dei tipi di dati per le tabelle in SQL Data WarehouseGuidance for defining data types for tables in SQL Data Warehouse

Usare queste raccomandazioni per definire tipi di dati per le tabelle che siano compatibili con SQL Data Warehouse.Use these recommendations to define table data types that are compatible with SQL Data Warehouse. Oltre a garantire la compatibilità, ridurre al minimo le dimensioni dei tipi di dati consente di migliorare le prestazioni delle query.In addition to compatibility, minimizing the size of data types improves query performance.

SQL Data Warehouse supporta i tipi di dati più diffusi.SQL Data Warehouse supports the most commonly used data types. Per un elenco dei tipi di dati supportati, vedere tipi di dati nell'istruzione CREATE TABLE.For a list of the supported data types, see data types in the CREATE TABLE statement.

Ridurre al minimo la lunghezza di rigaMinimize row length

Ridurre al minimo le dimensioni dei tipi di dati consente di ridurre la lunghezza di riga, con conseguenti prestazioni migliori per le query.Minimizing the size of data types shortens the row length, which leads to better query performance. Usare il tipo di dati più piccolo adatto ai dati.Use the smallest data type that works for your data.

  • Evitare di definire le colonne di tipo carattere con una lunghezza predefinita elevata.Avoid defining character columns with a large default length. Ad esempio, se il valore più lungo è 25 caratteri, definire la colonna come VARCHAR(25).For example, if the longest value is 25 characters, then define your column as VARCHAR(25).
  • Evitare di usare NVARCHAR quando serve solo VARCHAR.Avoid using NVARCHAR when you only need VARCHAR.
  • Quando possibile, usare NVARCHAR(4000) o VARCHAR(8000) invece di NVARCHAR(MAX) o VARCHAR(MAX).When possible, use NVARCHAR(4000) or VARCHAR(8000) instead of NVARCHAR(MAX) or VARCHAR(MAX).

Se si usa Polybase per caricare le tabelle, la lunghezza definita per la riga della tabella non può essere maggiore di 1 MB.If you are using Polybase to load your tables, the defined length of the table row cannot exceed 1 MB. Quando una riga con dati di lunghezza variabile supera 1 MB, è possibile caricare la riga con BCP, ma non con PolyBase.When a row with variable-length data exceeds 1 MB, you can load the row with BCP, but not with PolyBase.

Identificare i tipi di dati non supportatiIdentify unsupported data types

Se si esegue la migrazione del database da un altro database SQL, durante la migrazione è possibile riscontrare tipi di dati non supportati in SQL Data Warehouse.If you are migrating your database from another SQL database, you might encounter data types that are not supported in SQL Data Warehouse. Usare questa query per individuare i tipi di dati non supportati nello schema SQL esistente.Use this query to discover unsupported data types in your existing SQL schema.

SELECT  t.[name], c.[name], c.[system_type_id], c.[user_type_id], y.[is_user_defined], y.[name]
FROM sys.tables  t
JOIN sys.columns c on t.[object_id]    = c.[object_id]
JOIN sys.types   y on c.[user_type_id] = y.[user_type_id]
WHERE y.[name] IN ('geography','geometry','hierarchyid','image','text','ntext','sql_variant','timestamp','xml')
 AND  y.[is_user_defined] = 1;

Usare alternative per i tipi di dati non supportatiUse workarounds for unsupported data types

L'elenco seguente mostra i tipi di dati non supportati da SQL Data Warehouse e indica le alternative utilizzabili al posto dei tipi di dati non supportati.The following list shows the data types that SQL Data Warehouse does not support and gives alternatives that you can use instead of the unsupported data types.

Tipo di dati non supportatiUnsupported data type Soluzione alternativaWorkaround
geometrygeometry varbinaryvarbinary
geographygeography varbinaryvarbinary
hierarchyidhierarchyid nvarchar(4000)nvarchar(4000)
imageimage varbinaryvarbinary
texttext varcharvarchar
ntextntext nvarcharnvarchar
sql_variantsql_variant Dividere la colonna in più colonne fortemente tipizzate.Split column into several strongly typed columns.
tabletable Convertire in tabelle temporanee.Convert to temporary tables.
timestamptimestamp Rielaborare il codice per l'uso di datetime2 e della funzione CURRENT_TIMESTAMP.Rework code to use datetime2 and CURRENT_TIMESTAMP function. Solo le costanti sono supportate come valori predefiniti, quindi non è possibile definire current_timestamp come vincolo predefinito.Only constants are supported as defaults, therefore current_timestamp cannot be defined as a default constraint. Se è necessario eseguire la migrazione di valori della versione di riga da una colonna di tipo timestamp, usare BINARY(8) o VARBINARY(8) per valori della versione di riga NOT NULL o NULL.If you need to migrate row version values from a timestamp typed column, then use BINARY(8) or VARBINARY(8) for NOT NULL or NULL row version values.
xmlxml varcharvarchar
tipo definito dall'utente (UDT)user-defined type Riconvertire nel tipo di dati nativo, se possibile.Convert back to the native data type when possible.
valori predefinitidefault values I valori predefiniti supportano solo valori letterali e costanti.Default values support literals and constants only. Le espressioni o le funzioni non deterministiche, ad esempio GETDATE() o CURRENT_TIMESTAMP, non sono supportate.Non-deterministic expressions or functions, such as GETDATE() or CURRENT_TIMESTAMP, are not supported.

Passaggi successiviNext steps

Per altre informazioni, vedere:To learn more, see: