Het is je misschien opgevallen dat T-SQL zowel een CONVERT()
. bevat functie en een TRY_CONVERT()
functie die u in SQL Server kunt gebruiken om conversies tussen gegevenstypen uit te voeren. Maar als je je hoofd krabt over wat het verschil is tussen deze twee functies, lees dan verder!
Het verschil tussen CONVERT()
en TRY_CONVERT()
zit in de manier waarop ze omgaan met gegevenstypen die niet kunnen worden geconverteerd. De ene geeft een fout, terwijl de andere nul retourneert. De volgende voorbeelden tonen dit aan.
De CONVERT() Functie
Laten we eerst eens kijken naar wat de CONVERT()
functie doet. Het converteert het ene gegevenstype naar het andere. Hier is een voorbeeld:
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Resultaat:
Result ----------- Comments: 9
In dit voorbeeld converteren we een int
waarde naar varchar(12)
. En omdat de waarde kon worden omgezet in ons gewenste gegevenstype en lengte, werkte dit perfect.
Hoewel dit perfect werkt als de conversie slaagt, wat gebeurt er dan als het mislukt?
Als conversie mislukt → Fout
Laten we de code een beetje aanpassen en kijken wat er gebeurt als de conversie mislukt:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Resultaat:
Error: Arithmetic overflow error converting numeric to data type varchar.
We krijgen een foutmelding.
De TRY_CONVERT() Functie
De TRY_CONVERT()
is een alternatief dat we kunnen gebruiken om de foutmelding te voorkomen. Deze functie voert dezelfde gegevensconversiebewerking uit als CONVERT()
, maar als deze functie de conversie niet kan uitvoeren, wordt null
geretourneerd :
SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Resultaat:
Result ------ null
U kunt dit resultaat nemen en voorwaardelijke code toepassen, zodat er iets anders gebeurt, afhankelijk van het al dan niet slagen van de conversie.
Voorbeeld:
SELECT CASE WHEN TRY_CONVERT(varchar(1), 10.00) IS NULL THEN 'Conversion failed' ELSE 'Conversion succeeded' END AS Result;
Resultaat:
Result ----------------- Conversion failed
Ongeldige gegevenstypen
Een waarschuwing met TRY_CONVERT()
is dat het alleen op deze manier werkt bij gebruik van geldige gegevenstypen. U krijgt dus een foutmelding als u expliciet een gegevenstype opgeeft dat niet is toegestaan.
Voorbeeld:
SELECT 'Comments: ' + TRY_CONVERT(Homer, 10.00) AS Result;
Resultaat:
Error: Type Homer is not a defined system type.