Bonjour,
voici une requête
La SOUS requête plante car il n'arrive pas à convertir une donnée en INTEGER.
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 SELECT 13309, 'C05' , L.[TxtValeurCle1], L.[TxtValeurCle2], L.[TxtValeurCle3] , L.[NbNumLigne] FROM [dbo].[ETL_vLoadLigneOK] L WHERE L.[IdLoadFichier] = 13309 AND L.[TxtCodeMouvement] = 'C05' AND ( SELECT SUM ( CAST ( SUBSTRING ( L2.[TxtLigne], 148,5) AS INTEGER ) ) + SUM ( CAST ( SUBSTRING( L2.[TxtLigne], 153,5) AS INTEGER ) ) + SUM ( CAST ( SUBSTRING ( L2.[TxtLigne], 163,5) AS INTEGER ) ) + SUM ( CAST ( SUBSTRING ( L2.[TxtLigne], 168,5) AS INTEGER ) ) + SUM ( CAST ( SUBSTRING (L2.[TxtLigne], 173,5) AS INTEGER ) ) + SUM ( CAST ( SUBSTRING ( L2.[TxtLigne], 178,5) AS INTEGER ) ) FROM [dbo].[ETL_vLoadLigneOK] L2 WHERE L2.[IdLoadFichier] = 13309 AND L2.[TxtCodeMouvement] = 'C05' AND L2.[TxtValeurCle1] = L.[TxtValeurCle1] ) > 2500
Ces données qu'il n'arrive pas à convertir sont issues de la table mais avec un IdLoadfichier Différent !
L'erreur est la n°245 impossible de convertir un varchar en integer
Si j'exécute la requête suivante, il n'y a aucune erreur :
Pourtant c'est bien la sous requête qui plante dans le cas précédent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT SUM ( CAST ( SUBSTRING ( L2.[TxtLigne], 148,5) AS INTEGER ) ) + SUM ( CAST ( SUBSTRING( L2.[TxtLigne], 153,5) AS INTEGER ) ) + SUM ( CAST ( SUBSTRING ( L2.[TxtLigne], 163,5) AS INTEGER ) ) + SUM ( CAST ( SUBSTRING ( L2.[TxtLigne], 168,5) AS INTEGER ) ) + SUM ( CAST ( SUBSTRING (L2.[TxtLigne], 173,5) AS INTEGER ) ) + SUM ( CAST ( SUBSTRING ( L2.[TxtLigne], 178,5) AS INTEGER ) ) FROM [dbo].[ETL_vLoadLigneOK] L2 WHERE L2.[IdLoadFichier] = 13309 AND L2.[TxtCodeMouvement] = 'C05'
Ma question est donc pourquoi ce cas plante alors que ça ne devrait pas à mes yeux.
Je pourrais modifier la requête afin de l'optimiser (avec un group by + having) mais mon objectif est de comprendre comment cela se fait que SQL Server se foire dans son plan d'exécution ?
Merci
Partager