2015-07-22 1 views
1

Je sais pourquoi je vois cette erreur, c'est parce que certains de mes locationDeletionDate est '9999-12-31 00: 00: 00.0000000', et l'ajout de 90 jours à le locationDeletionDate (comme je le fais dans ma requête) provoque l'erreur dans le titre:Ajout d'une valeur à une colonne 'datetime2' a causé un débordement

...WHERE     
(bpj.JobStatus = 'Live') 
AND (l.locationEffectiveDate <= SYSDATETIME()) 
AND (dateadd(d,90,l.locationDeletionDate) >= SYSDATETIME())... 

Je suppose que ce que je dois est une CASE conditionnelle dans mon WHERE -clause pour assurer la date ne sera pas erreur si 90 jours sont ajoutés ? Ou y a-t-il une manière plus élégante?

+1

Pourquoi ne pas simplement ajouter un prédicat à votre clause where? AND l.locationDeletionDate <'9999-01-01' ou quelque chose du genre. Pourquoi utilisez-vous une telle valeur ridiculement grande de toute façon? Je pense que NULL serait plus approprié. –

+0

Je serais d'accord avec @sean pourquoi magasin 9999 dates de toute façon? –

Répondre

4

Vous pouvez utiliser cette approche pour vous résoudre la question Dans ce cas

...WHERE     
(bpj.JobStatus = 'Live') 
AND (l.locationEffectiveDate <= SYSDATETIME()) 
AND (l.locationDeletionDate >= dateadd(d, -90, SYSDATETIME())... 

vous aussi résoudre un problème de performance. Votre prédicat devient SARGable.