Je kunt datatypes niet mixen in CASE-expressies (of in ieder geval zonder ervoor te zorgen dat ze impliciet OK casten)
wanneer geconfronteerd met een statement zoals het volgende, zal SQL Server de prioriteit van het datatype gebruiken om te bepalen wat het algemene datatype van de expressie zou moeten zijn
SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END
Voor de bovenstaande datetime
heeft een hogere prioriteit dan char
dus het cast de string impliciet naar een datum die mislukt.
Het volgende lukt echter als sql_variant
heeft een hogere prioriteit
SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END
Dus je kunt op die manier meerdere gemengde datatypes retourneren (ik weet niet zeker hoe gemakkelijk sql_variant
is om mee te werken)
Anders zou je NULL
kunnen retourneren voor ongeldige datetimes in plaats van de onzingegevens terug te sturen of alles naar een string te casten als je het moet retourneren.