Du har måske bemærket, at T-SQL indeholder både en CONVERT()
funktion og en TRY_CONVERT()
funktion, som du kan bruge i SQL Server til at udføre konverteringer mellem datatyper. Men hvis du klør dig i hovedet over, hvad forskellen er mellem disse to funktioner, så læs videre!
Forskellen mellem CONVERT()
og TRY_CONVERT()
er i den måde, de håndterer datatyper, der ikke kan konverteres. Den ene kaster en fejl, mens den anden returnerer null. De følgende eksempler viser dette.
Konverter()-funktionen
Lad os først se på, hvad CONVERT()
er funktion gør. Det konverterer en datatype til en anden. Her er et eksempel:
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Resultat:
Result ----------- Comments: 9
I dette eksempel konverterer vi en int
værdi til varchar(12)
. Og fordi værdien kunne konverteres til vores ønskede datatype og længde, fungerede dette perfekt.
Men selvom dette fungerer perfekt, når konverteringen lykkes, hvad sker der så, når den mislykkes?
Når konvertering mislykkes → Fejl
Lad os justere koden lidt og se, hvad der sker, når konverteringen mislykkes:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Resultat:
Error: Arithmetic overflow error converting numeric to data type varchar.
Vi får en fejl.
TRY_CONVERT()-funktionen
TRY_CONVERT()
er et alternativ, som vi kan bruge til at forhindre fejlmeddelelsen. Denne funktion udfører den samme datakonverteringsoperation som CONVERT()
, men hvis denne funktion ikke kan udføre konverteringen, returnerer den null
:
SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Resultat:
Result ------ null
Du kan tage dette resultat og anvende betinget kode, så der sker en anden ting, afhængigt af om konverteringen lykkes eller ej.
Eksempel:
SELECT CASE WHEN TRY_CONVERT(varchar(1), 10.00) IS NULL THEN 'Conversion failed' ELSE 'Conversion succeeded' END AS Result;
Resultat:
Result ----------------- Conversion failed
Ugyldige datatyper
En advarsel med TRY_CONVERT()
er, at det kun fungerer på denne måde, når du bruger gyldige datatyper. Så du får en fejl, hvis du udtrykkeligt angiver en datatype, der ikke er tilladt.
Eksempel:
SELECT 'Comments: ' + TRY_CONVERT(Homer, 10.00) AS Result;
Resultat:
Error: Type Homer is not a defined system type.