Conversione del tipo di dati (Motore di database)
I tipi di dati possono essere convertiti negli scenari seguenti:
Quando i dati di un oggetto vengono spostati, confrontati o combinati con i dati di un altro oggetto, può essere necessario convertirli nel tipo di dati del secondo oggetto.
Quando i dati di una colonna di risultati, di un codice restituito o di un parametro di output di Transact-SQL vengono spostati in una variabile di programma, è necessario convertirli dal tipo di dati di sistema di SQL Server a quello della variabile.
Le conversioni supportate tra una variabile di applicazione e una colonna del set di risultati, un codice restituito, un parametro o un marcatore di parametro di SQL Server vengono definite dall'API di database.
Conversione implicita ed esplicita
I tipi di dati possono essere convertiti in modo implicito o esplicito.
Le conversioni implicite non sono visibili all'utente. SQL Server converte automaticamente i dati da un tipo all'altro. Se ad esempio un valore smallint viene confrontato con un valore int, il valore smallint viene implicitamente convertito in un valore int prima dell'esecuzione del confronto.
GETDATE() viene convertito implicitamente nello stile di data 0. SYSDATETIME() viene convertito implicitamente nello stile di data 21.
Nelle conversioni esplicite vengono utilizzate le funzioni CAST e CONVERT.
Tramite le funzioni CAST e CONVERT un valore, ad esempio una variabile locale, una colonna o un'altra espressione, viene convertito da un tipo di dati a un altro. Ad esempio, la funzione CAST seguente converte il valore numerico $157.27 nella stringa di caratteri '157.27':
CAST ( $157.27 AS VARCHAR(10) )
Utilizzare CAST invece di CONVERT per rendere il codice di programma Transact-SQL compatibile con lo standard ISO. Utilizzare CONVERT invece di CAST per trarre vantaggio dalla funzionalità degli stili disponibile in CONVERT.
Nella figura seguente vengono illustrate le conversioni di tipi di dati esplicite e implicite consentite per i tipi di dati di sistema di SQL Server. Questi sono xml, bigint e sql_variant. Non è possibile eseguire una conversione implicita in un'assegnazione dal tipo di dati sql_variant, ma è possibile eseguire una conversione implicita verso il tipo di dati sql_variant.
Funzionamento della conversione dei tipi di dati
Alcune conversioni implicite ed esplicite non sono supportate quando si converte il tipo di dati di un oggetto SQL Server in un altro tipo di dati. Non è ad esempio possibile convertire un valore nchar in un valore image. Un valore nchar può essere convertito in un valore binary solo mediante una conversione esplicita, in quanto la conversione implicita in valore binary non è supportata. È tuttavia possibile convertire in modo esplicito e implicito un valore nchar in valore nvarchar.
Negli argomenti seguenti viene descritto il funzionamento della conversione dei tipi di dati corrispondenti:
Conversione del tipo di dati mediante stored procedure di automazione OLE
Poiché in SQL Server vengono utilizzati tipi di dati Transact-SQL e nell'automazione OLE vengono utilizzati tipi di dati Visual Basic, i dati che vengono trasferiti da un sistema all'altro devono essere convertiti tramite le stored procedure di automazione OLE.
Nella tabella seguente vengono descritte le conversioni dei tipi di dati di SQL Server nei tipi di dati Visual Basic.
Tipo di dati di SQL Server |
Tipo di dati di Visual Basic |
---|---|
char, varchar, text, nvarchar, ntext |
String |
decimal, numeric |
String |
bit |
Boolean |
binary, varbinary, image |
Matrice di Byte() unidimensionale |
int |
Long |
smallint |
Integer |
tinyint |
Byte |
float |
Double |
real |
Single |
money, smallmoney |
Currency |
datetime, smalldatetime |
Date |
Qualsiasi tipo impostato su NULL |
Variant impostato su Null |
Tutti i valori di SQL Server vengono convertiti in un unico valore Visual Basic, ad eccezione dei valori binary, varbinary e image. Questi valori vengono convertiti in matrice di Byte() unidimensionale in Visual Basic. La matrice ha un intervallo di Byte(0 to length1), dove length è il numero di byte incluso nel valore SQL Server binary, varbinary o image.
Di seguito sono riportate le conversioni dai tipi di dati Visual Basic nei tipi di dati di SQL Server.
Tipo di dati di Visual Basic |
Tipo di dati di SQL Server |
---|---|
Long, Integer, Byte, Boolean, Object |
int |
Double, Single |
float |
Currency |
money |
Date |
datetime |
String con 4000 caratteri o meno |
varchar/nvarchar |
String con più di 4000 caratteri |
text/ntext |
Matrice di Byte() unidimensionale con numero di byte minore o uguale a 8000 |
varbinary |
Matrice di Byte() unidimensionale con un numero di byte maggiore di 8000 |
image |