Bij het converteren tussen gegevenstypen in SQL Server kom je verschillende functies tegen die schijnbaar hetzelfde doen. Er zijn echter meestal verschillen tussen deze functies die op het eerste gezicht misschien niet duidelijk zijn. Een voorbeeld hiervan is het verschil tussen de CAST()
en TRY_CAST()
functies.
Dit artikel demonstreert het verschil tussen deze functies bij het gebruik van SQL Server.
Het belangrijkste verschil tussen de CAST()
en TRY_CAST()
functies zit in de manier waarop ze omgaan met gegevens die niet kunnen worden geconverteerd.
De CAST()-functie
De CAST()
functie converteert een uitdrukking van het ene gegevenstype naar het andere. Hiermee kunt u dingen doen zoals het samenvoegen van twee waarden van verschillende gegevenstypen. Zoals dit:
SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;
Resultaat:
Result ----------- Comments: 9
Dit werkt prima wanneer de gegevens kunnen worden geconverteerd. Maar wat als de gegevens niet kunnen worden geconverteerd?
In dat geval krijg je zoiets als dit:
SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;
Resultaat:
Error: Arithmetic overflow error converting numeric to data type varchar.
Dit is redelijk genoeg - als SQL Server de gegevens niet kan converteren, moet u dit weten!
Er is echter een andere manier om het te doen.
De TRY_CAST() Functie
De TRY_CAST()
functie werkt net als CAST()
behalve dat als de gegevens niet kunnen worden geconverteerd, het null
. teruggeeft (in plaats van een foutmelding te geven zoals CAST()
doet):
SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;
Resultaat:
Result ------ null
Dit kan handig zijn als u voorwaardelijke programmering wilt gebruiken, zodat de toepassing een andere taak uitvoert, afhankelijk van of de gegevens kunnen worden geconverteerd of niet.
Voorbeeld:
SELECT CASE WHEN TRY_CAST(10.00 AS varchar(2)) IS NULL THEN 'Cast failed' ELSE 'Cast succeeded' END AS Result;
Resultaat:
Result ----------- Cast failed
Ongeldige gegevenstypen
De TRY_CAST()
functie werkt alleen op deze manier bij gebruik van geldige gegevenstypen. U krijgt dus een foutmelding als u expliciet een gegevenstype opgeeft dat niet is toegestaan.
Voorbeeld:
SELECT 'Comments: ' + TRY_CAST(10.00 AS Miami) AS Result;
Resultaat:
Error: Type Miami is not a defined system type.