Non puoi mischiare i tipi di dati nelle espressioni CASE (o almeno senza fare attenzione che trasmettano implicitamente OK)
quando si confronta con una affermazione come la seguente SQL Server utilizzerà la precedenza del tipo di dati per determinare quale dovrebbe essere il tipo di dati complessivo dell'espressione
SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END
Per il datetime
di cui sopra ha una precedenza maggiore di char
quindi esegue il cast implicito della stringa su una data che non riesce.
Il seguente riesce comunque come sql_variant
ha una precedenza maggiore
SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END
Quindi puoi restituire più tipi di dati misti in questo modo (non sono sicuro di quanto sia facile sql_variant
è con cui lavorare)
A parte questo potresti restituire NULL
per datetime non valide invece di restituire i dati senza senso o eseguire il cast di tutto in una stringa se è necessario restituirla.