2017-10-18 1 views
0

Je reçois une erreur lors de l'exécution de cette requête ci-dessous. Comment dois-je le gérer?La colonne Date-heure a provoqué un débordement

update a 
set pidate = case 
when PromisedYear is not null 
then dateadd(week, cast(PromisedWeek as int), dateadd(year, PromisedYear - 1900, 0)) 
else '2020-12-31' 
end 
FROM #CuringATPDualOutput1 a 

Erreur:

Adding a value to a 'datetime' column caused an overflow.

Lorsque Promisedweek est inférieur à 59, comme 44 ou 45, la requête fonctionne bien. seulement de donner une erreur quand il est 59.

données:

44 2017 
44 2017 
44 2017 
44 2017 
44 2017 
45 2017 
45 2017 
45 2017 
45 2017 
45 2017 
46 2017 
45 2017 
45 2017 
45 2017 
45 2017 
59 NULL 
46 2017 
59 NULL 
45 2017 
45 2017 
46 2017 
46 2017 
46 2017 
47 2017 
47 2017 
47 2017 
48 2017 
48 2017 
48 2017 
49 2017 
49 2017 
49 2017 
50 2017 
50 2017 
50 2017 
51 2017 
51 2017 
+2

Fournir des données d'échantillon et les résultats souhaités. –

+0

@GordonLinoff s'il vous plaît vérifier le poste, je l'ai édité. – Doosu

+3

Comment gérez-vous cette valeur NULL? Si ce n'est pas le cas, cela va vous causer des problèmes. – Leonidas199x

Répondre

0

Voici vos données d'échantillon et la requête que vous avez publié. J'ai même ajouté quelques rangées de données d'échantillon supérieures à 59 et elles fonctionnent très bien. Je suppose que vous avez quelque chose d'autre.

declare @Output table 
(
    PromisedWeek int 
    , PromisedYear int 
    , pidate datetime 
) 

insert @Output values 
(44, 2017, null) 
, (45, 2017, null) 
, (46, 2017, null) 
, (47, 2017, null) 
, (48, 2017, null) 
, (49, 2017, null) 
, (50, 2017, null) 
, (51, 2017, null) 
, (59, NULL, null) 
, (59, 2017, null) 
, (379, 2017, null) 

update @Output 
set pidate = case 
when PromisedYear is not null 
then dateadd(week, cast(PromisedWeek as int), dateadd(year, PromisedYear - 1900, 0)) 
else '2020-12-31' 
end 

select * from @Output 

En fait, même votre code original fonctionne avec ces données et ne déclenchera pas d'exception.

select dateadd(week, cast(PromisedWeek as int), dateadd(year, PromisedYear - 1900, 0)) 
from @Output 
where PromisedWeek = 59 
+0

Bonjour Sean, pouvez-vous s'il vous plaît une dernière fois essayer d'exécuter la requête de mise à jour? J'ai édité mon message avec la requête exacte de mon code. – Doosu

+0

Vous devriez être capable de tester cela assez facilement. Je vous ai fourni un harnais de test. Et votre code mis à jour ne génère toujours aucune erreur. –

+0

Je pense que j'ai eu l'erreur, ma colonne # CuringATOPDualOutput1 PromisedYear a une valeur BLANK, pas NULL. Je suppose que cela cause l'erreur. c'est possible? Null et Blank sont différents non? – Doosu