Bonjour,

Je ne comprends pas pourquoi j'ai cette erreur.
Adding a value to a 'datetime' column caused overflow.
Je l'obtiens lorsque j'exécute la première requête (en décommentant la ligne avec DATEADD), alors que le lot de deux instructions s'exécutent parfaitement.
J'ai des '9999-12-31' dans ODS_DAT_FIN_VAL mais la sous-requête ne ramène jamais ces lignes là.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
SELECT 
	t1.UC03_C_UC			UC03_C_UC
	,t1.UC03_D_COT			UC03_D_COT
	,t1.UC03_M_COT_1		UC03_M_COT_1
	,t1.UC03_NO_GRP_COTA	UC03_NO_GRP_COTA
	,t2.ODS_DAT_FIN_VAL		ODS_DAT_DEB_VAL 
--	,DATEADD(dd, 1, t2.ODS_DAT_FIN_VAL)		ODS_DAT_DEB_VAL 
	,t1.ODS_DAT_FIN_VAL		ODS_DAT_FIN_VAL
	,'Y'	SWI_MDF	
into #tmp
FROM #uctb03 t1
INNER JOIN (
	SELECT t1.* 
	--into #tmp
	FROM #uctb03 t1
	LEFT JOIN #uctb03 t2
		ON	t1.UC03_C_UC = t2.UC03_C_UC
		AND t1.UC03_NO_GRP_COTA	= t2.UC03_NO_GRP_COTA
		AND t1.UC03_D_COT = t2.UC03_D_COT
		AND t2.ODS_DAT_FIN_VAL = '99991231'
	WHERE t2.UC03_C_UC is null
) t2
	ON	t1.UC03_C_UC = t2.UC03_C_UC
	AND t1.UC03_NO_GRP_COTA	= t2.UC03_NO_GRP_COTA
	AND t1.UC03_D_COT > t2.UC03_D_COT
	AND t2.ODS_DAT_FIN_VAL BETWEEN DATEADD(dd, -1, t1.ODS_DAT_DEB_VAL) AND DATEADD(dd, -1, t1.ODS_DAT_FIN_VAL)
 
update #tmp
set ODS_DAT_DEB_VAL = dateadd(dd,1,ODS_DAT_DEB_VAL)
Je ne comprends pas.
Si cette erreur est produite lors de l'exécution dans ce cas là la sous requête doit ramener des 9999-12-31, ce qui n'est pas le cas.
Si cette erreur est produite lors de la compilation, elle doit être également provoquée lorsqu'on demande le plan d'exécution, ce n'est pas ne cas non plus. Le plan d'exécution s'affiche bel et bien.

Alors, qqun a des explications? Que faire?