До 2005 года возможности обработки ошибок были очень ограниченными.
Для SQL 2005+ это должно работать
declare
@date_value varchar(50)
,@tmp datetime;
declare x cursor local fast_forward
for
select screen_date from d8003
open x;
fetch next from x into @date_value;
while @@fetch_status = 0
begin
begin try
set @tmp = convert(datetime,@date_value, 120)
end try
begin catch
select 'This one is bad! Please fix me!! (' + rtrim(@date_value) + ')' bad_values;
end catch
fetch next from x into @date_value;
end
close x;
deallocate x;
GO
Это вернет ваши неверные данные в SQL 2012+
try_convert, вернет ноль для неконвертируемых строк.
select
try_convert(datetime, screen_date, 120) mytryconvert
,screen_date
from d8003
where try_convert(datetime, screen_date, 120) is null
Вы можете исправить данные вручную или встроенным способом с помощью строки.