Eu tenho um projeto etl onde a fonte tem 60 colunas datetime2 e o destino é inteiramente datetime.
Alguns dias atrás, acordamos com um data warehouse vazio porque um usuário em um hospital, para um paciente, inseriu a data da cirurgia '1220-01-01'.
Eu temporariamente contornei o problema colocando cada uma das colunas em uma função personalizada:
ALTER function [dbo].[scrub_datetime2](@date datetime2)
returns date
as
begin
declare @return date
set @return = case when @date <= '1800-01-01' then null else @date end
return @return
end
E isso funciona bem para se livrar do texto vermelho, mas também dobrou o tempo que o trabalho leva para ser executado. Fico feliz em fazer minha parte, mantendo os hamsters na sala do servidor aquecidos durante o Natal, mas não posso realmente justificar perder 2,5 horas do precioso tempo noturno para esse problema.
Pergunta Como verificar com mais eficiência se um valor datetime2 caberá em datetime?