I SQL Server är en ofta använd funktion CAST() , som konverterar ett uttryck av en datatyp till en annan. Men om rollbesättningen inte lyckas, returnerar den ett fel.
Ange TRY_CAST() .
TRY_CAST() funktionen returnerar inte ett fel om casten misslyckas. Istället returnerar den NULL .
Det finns dock vissa tillfällen då det kommer att returnera ett fel.
Syntax
Syntaxen ser ut så här:
TRY_CAST ( expression AS data_type [ ( length ) ] )
Där expression är uttrycket som ska konverteras, data_type är den nya datatypen och length är en valfri längd för den nya datatypen.
Exempel 1 – Cast lyckas
Här är ett exempel på hur du castar en sträng som decimal :
SELECT TRY_CAST('007' AS DECIMAL(5,2)); Resultat:
7.00
I det här fallet lyckades rollbesättningen.
Exempel 2 – Cast misslyckas och returnerar NULL
Här är ett exempel på att casten misslyckas och NULL returneras:
SELECT TRY_CAST('Double Oh Seven!' AS DECIMAL(5,2)); Resultat:
NULL
Casten misslyckades, och därför NULL returnerades.
Som en jämförelse, här är vad som händer när vi använder CAST() istället för TRY_CAST() :
SELECT CAST('Double Oh Seven!' AS DECIMAL(5,2)); Resultat:
Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
Exempel 3 – Cast misslyckas och returnerar ett fel
Det finns vissa tillfällen där TRY_CAST() kommer att returnera ett fel.
Om en cast uttryckligen inte är tillåten, returnerar den ett felmeddelande:
SELECT TRY_CAST(10 AS xml); Resultat:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
Mer information
Se hur CAST() Fungerar i SQL Server för fler konverteringsexempel och CAST() kontra TRY_CAST() i SQL Server för en jämförelse mellan CAST() och TRY_CAST() .
Se Microsofts dokumentation för CAST() och CONVERT() för mer detaljerad information (det mesta gäller även för TRY_CAST() ).