Du kan inte blanda datatyper i CASE-uttryck (eller åtminstone utan att se till att de implicit cast OK)
när den konfronteras med ett uttryck som följande kommer SQL Server att använda datatypprioritet för att bestämma vad den övergripande datatypen för uttrycket ska vara
SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END
För ovanstående datetime har högre prioritet än char så den kastar implicit strängen till ett datum som misslyckas.
Följande lyckas dock som sql_variant har högre prioritet
SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END
Så du kan returnera flera blandade datatyper på det sättet (jag är inte säker på hur lätt sql_variant är att arbeta med dock)
Annat än det kan du returnera NULL för ogiltiga datum och tider istället för att returnera nonsensdata eller casta allt till en sträng om du måste returnera den.