Du kan ikke blande datatyper i CASE-udtryk (eller i det mindste uden at passe på, at de implicit vil kaste OK)
Når de konfronteres med et sætningselement som det følgende, vil SQL Server bruge datatypeprioritet til at bestemme, hvad den overordnede datatype for udtrykket skal være
SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END
For ovenstående datetime
har højere forrang end char
så den caster implicit strengen til en dato, der mislykkes.
Det følgende lykkes dog som sql_variant
har en højere prioritet
SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END
Så du kan returnere flere blandede datatyper på den måde (jeg er ikke sikker på, hvor let sql_variant
er dog at arbejde med)
Andet end det kan du returnere NULL
for ugyldige dato og klokkeslæt i stedet for at returnere nonsensdata eller cast alt til en streng, hvis du skal returnere det.