Potresti aver notato che T-SQL include sia un CONVERT() funzione e un TRY_CONVERT() funzione che è possibile utilizzare in SQL Server per eseguire conversioni tra tipi di dati. Ma se ti stai scervellando su quale sia la differenza tra queste due funzioni, continua a leggere!
La differenza tra CONVERT() e TRY_CONVERT() è nel modo in cui gestiscono i tipi di dati che non possono essere convertiti. Uno genera un errore, mentre l'altro restituisce null. Gli esempi seguenti lo dimostrano.
La funzione CONVERT()
Per prima cosa, diamo un'occhiata a cosa è il CONVERT() funzione fa. Converte un tipo di dati in un altro. Ecco un esempio:
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Risultato:
Result ----------- Comments: 9
In questo esempio, convertiamo un int valore a varchar(12) . E poiché è stato possibile convertire il valore nel tipo e nella lunghezza di dati desiderati, ha funzionato perfettamente.
Tuttavia, mentre funziona perfettamente quando la conversione riesce, cosa succede quando fallisce?
Quando la conversione non riesce → Errore
Modifichiamo un po' il codice e vediamo cosa succede quando la conversione non riesce:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Risultato:
Error: Arithmetic overflow error converting numeric to data type varchar.
Viene visualizzato un errore.
La funzione TRY_CONVERT()
Il TRY_CONVERT() è un'alternativa che possiamo utilizzare per prevenire il messaggio di errore. Questa funzione esegue la stessa operazione di conversione dei dati di CONVERT() , tuttavia, se questa funzione non può eseguire la conversione, restituisce null :
SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Risultato:
Result ------ null
Puoi prendere questo risultato e applicare il codice condizionale in modo che accada qualcosa di diverso a seconda che la conversione abbia esito positivo o meno.
Esempio:
SELECT
CASE WHEN TRY_CONVERT(varchar(1), 10.00) IS NULL
THEN 'Conversion failed'
ELSE 'Conversion succeeded'
END AS Result; Risultato:
Result ----------------- Conversion failed
Tipi di dati non validi
Un avvertimento con TRY_CONVERT() è che funziona in questo modo solo quando si utilizzano tipi di dati validi. Quindi riceverai un errore se fornisci esplicitamente un tipo di dati non consentito.
Esempio:
SELECT 'Comments: ' + TRY_CONVERT(Homer, 10.00) AS Result;
Risultato:
Error: Type Homer is not a defined system type.