sql_variant (Transact-SQL)

Tipo di dati per l'archiviazione di valori per vari tipi di dati supportati da SQL Server.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

sql_variant

Osservazioni

sql_variant può essere utilizzato in colonne, parametri, variabili e in valori restituiti di funzioni definite dall'utente. sql_variant consente a questi oggetti di database di supportare valori di altri tipi di dati.

Una colonna di tipo sql_variant può includere righe con tipi di dati diversi, ad esempio, in una colonna di tipo sql_variant è possibile archiviare valori di tipo int, binary e char. Nella tabella seguente sono elencati i tipi di valore che non è possibile archiviare con sql_variant:

varchar(max)

varbinary(max)

nvarchar(max)

xml

text

ntext

image

rowversion (timestamp)

sql_variant

geography

hierarchyid

geometry

Tipi definiti dall'utente

datetimeoffset

La lunghezza massima supportata da sql_variant è pari a 8016 byte. La lunghezza include sia le informazioni sul tipo di base che il valore del tipo di base. La lunghezza massima del valore effettivo del tipo di base è di 8.000 byte.

Per poter utilizzare il tipo di dati sql_variant in operazioni quali l'addizione e la sottrazione, è prima necessario eseguirne il casting al valore del tipo di dati di base corrispondente.

È supportata l'assegnazione di un valore predefinito a sql_variant. A questo tipo di dati è inoltre possibile assegnare NULL come valore sottostante, ma in questo caso ai valori NULL non verrà associato alcun tipo di base. Inoltre, non è consentito impostare un altro valore sql_variant come tipo di base per sql_variant.

Una chiave univoca, primaria o esterna può includere colonne di tipo sql_variant, ma la lunghezza totale dei valori di dati che compongono la chiave di una riga specifica non deve essere maggiore della lunghezza massima di un indice, ovvero 900 byte.

Una tabella può contenere un numero qualsiasi di colonne di tipo sql_variant.

Non è possibile utilizzare il tipo di dati sql_variant in CONTAINSTABLE e FREETEXTTABLE.

ODBC non offre un supporto completo del tipo sql_variant. Quando si utilizza il provider Microsoft OLE DB per ODBC (MSDASQL), pertanto, le query eseguite su colonne di tipo sql_variant restituiscono dati binary. Ad esempio, la stringa di caratteri 'PS2091' di una colonna di tipo sql_variant viene restituita come 0x505332303931.

Confronto di valori sql_variant

Il tipo di dati sql_variant è incluso nella parte iniziale dell'elenco della gerarchia dei tipi di dati per la conversione. Per l'esecuzione di confronti di valori sql_variant, la gerarchia dei tipi di dati di SQL Server viene suddivisa in gruppi di tipi di dati.

Gerarchia dei tipi di dati

Gruppo di tipi di dati

sql_variant

sql_variant

datetime2

Data e ora

datetimeoffset

Data e ora

datetime

Data e ora

smalldatetime

Data e ora

date

Data e ora

time

Data e ora

float

Valori numerici approssimati

real

Valori numerici approssimati

decimal

Valori numerici esatti

money

Valori numerici esatti

smallmoney

Valori numerici esatti

bigint

Valori numerici esatti

int

Valori numerici esatti

smallint

Valori numerici esatti

tinyint

Valori numerici esatti

bit

Valori numerici esatti

nvarchar

Unicode

nchar

Unicode

varchar

Unicode

char

Unicode

varbinary

Binary

binary

Binary

uniqueidentifier

Uniqueidentifier

Per i confronti sql_variant vengono applicate le regole seguenti:

  • Nei confronti tra due valori sql_variant con tipi di dati di base diversi appartenenti a gruppi di tipi di dati differenti, il valore appartenente al gruppo di tipi di dati che occupa un livello più alto nella gerarchia viene considerato il valore maggiore dei due valori.

  • Nei confronti di valori sql_variant con tipi di dati di base diversi appartenenti allo stesso gruppo, il valore del tipo di dati di base che appartiene a un gruppo di livello inferiore nella gerarchia viene convertito in modo implicito nell'altro tipo di dati, dopodiché viene eseguito il confronto.

  • Quando vengono confrontati i valori sql_variant dei tipi di dati char, varchar, nchar o nvarchar, le regole di confronto vengono messe a confronto innanzitutto in base ai criteri seguenti: LCID, versione LCID, flag di confronto e ID di ordinamento. Per ognuno di questi criteri il confronto viene eseguito con valori interi e nell'ordine elencato. Se tutti questi criteri sono uguali, i valori effettivi della stringa vengono confrontati in base alle regole di confronto.

Conversione di dati sql_variant

Nel caso del tipo di dati sql_variant, SQL Server supporta la conversione implicita nel tipo sql_variant degli oggetti a cui è associato un tipo di dati diverso. SQL Server non supporta tuttavia le conversioni implicite dal tipo di dati sql_variant in oggetti a cui è associato un tipo di dati diverso.

Vedere anche

Riferimento

CAST e CONVERT (Transact-SQL)

SQL_VARIANT_PROPERTY (Transact-SQL)