Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

CONVERT() vs TRY_CONVERT in SQL Server:qual è la differenza?

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.