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

CAST() vs TRY_CAST() in SQL Server:qual è la differenza?

Durante la conversione tra tipi di dati in SQL Server, ti imbatterai in varie funzioni che apparentemente fanno la stessa cosa. Tuttavia, di solito ci sono differenze tra queste funzioni che potrebbero non essere evidenti a prima vista. Un esempio di ciò è la differenza tra CAST() e TRY_CAST() funzioni.

Questo articolo illustra la differenza tra queste funzioni quando si utilizza SQL Server.

La principale differenza tra il CAST() e TRY_CAST() funzioni è nel modo in cui gestiscono i dati che non possono essere convertiti.

La funzione CAST()

Il CAST() La funzione converte un'espressione di un tipo di dati in un altro. Ciò ti consente di fare cose come concatenare due valori di diversi tipi di dati. In questo modo:

SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;

Risultato:

Result     
-----------
Comments: 9

Funziona bene quando i dati possono essere convertiti. Ma cosa succede se i dati non possono essere convertiti?

In tal caso otterrai qualcosa del genere:

SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;

Risultato:

Error: Arithmetic overflow error converting numeric to data type varchar.

Questo è abbastanza giusto:se SQL Server non è in grado di convertire i dati, devi saperlo!

Tuttavia, c'è un altro modo per farlo.

La funzione TRY_CAST()

Il TRY_CAST() la funzione funziona proprio come CAST() tranne che se i dati non possono essere convertiti, restituisce null (invece di generare un errore come CAST() fa):

SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;

Risultato:

Result
------
null

Questo può essere utile se si desidera utilizzare la programmazione condizionale in modo che l'applicazione esegua un'attività diversa a seconda che i dati possano essere convertiti o meno.

Esempio:

SELECT   
    CASE WHEN TRY_CAST(10.00 AS varchar(2)) IS NULL   
    THEN 'Cast failed'  
    ELSE 'Cast succeeded'  
END AS Result;

Risultato:

Result     
-----------
Cast failed

Tipi di dati non validi

Il TRY_CAST() La funzione 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_CAST(10.00 AS Miami) AS Result;

Risultato:

Error: Type Miami is not a defined system type.