Votre problème est que vous essayez de convert
le numérique à un datetime
, et cela ne fonctionne tout simplement pas.
Vous devez transformer votre numeric
dans une chaîne d'abord :
declare @yr_mnth_dt as numeric;
set @yr_mnth_dt = 20130822;
select yr_mnth_dt = cast(cast(@yr_mnth_dt as char(8)) as datetime);
SQL Fiddle avec démo.
Lorsque vous essayez de convertir un type numérique en un datetime
, SQL Server essaie d'ajouter la valeur numérique comme nombre de jours à la date 01-Jan-1900
. Dans votre cas, cela essaie d'ajouter des millions de jours, et donc l'erreur de débordement.
CONVERT
fonctionne bien aussi, si vous préférez :
select yr_mnth_dt = convert(datetime, convert(char(8), @yr_mnth_dt));
SQL Fiddle avec démo.