Voilà,
j'ai un bug très étrange et j'ai besoin de savoir d’où il vient ou par ou commencer à chercher.
J'ai une requête simple qui date d'un époque ou je ne travaillais pas encore a mon post actuel.
Il s'agit de 4 tables avec des jointures internes simples, sur une seule clé et quelque filtres dans ma clause Where.
Malheureusement la politique de confidentialité de ma boite ne m'autorise pas a fournir les descriptif de tables.
La requête suivante me retourne deux lignes ce qui est juste
Mais si je fais un select * de T2 ça ne retourne aucune ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Select * FROM T1 INNER JOIN T2 ON T2.IdT2 = T1.IdT2 INNER JOIN T3 ON T3.IdT3 = T2.IdT3 INNER JOIN T4 ON T4.IdT4 = T3.IdT4 WHERE T1.IdT1 = 65955 AND T2.AutreCle IS NULL AND T4.CODE = 'LeCode' AND CONVERT( DECIMAL(9,2) , T2.NouveauPrix ) = 2.8
Encore plus drôle, cette variante donne 2 lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Select T2.* FROM T1 INNER JOIN T2 ON T2.IdT2 = T1.IdT2 INNER JOIN T3 ON T3.IdT3 = T2.IdT3 INNER JOIN T4 ON T4.IdT4 = T3.IdT4 WHERE T1.IdT1 = 65955 AND T2.AutreCle IS NULL AND T4.CODE = 'LeCode' AND CONVERT( DECIMAL(9,2) , T2.NouveauPrix ) = 2.8
mais celle ci aucune
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Select T2.*,T3.* FROM T1 INNER JOIN T2 ON T2.IdT2 = T1.IdT2 INNER JOIN T3 ON T3.IdT3 = T2.IdT3 INNER JOIN T4 ON T4.IdT4 = T3.IdT4 WHERE T1.IdT1 = 65955 AND T2.AutreCle IS NULL AND T4.CODE = 'LeCode' AND CONVERT( DECIMAL(9,2) , T2.NouveauPrix ) = 2.8
Encore plus fort, plus ma clause where est permissive, mois j'ai de résultats
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Select T2.*,T3.IdT3 FROM T1 INNER JOIN T2 ON T2.IdT2 = T1.IdT2 INNER JOIN T3 ON T3.IdT3 = T2.IdT3 INNER JOIN T4 ON T4.IdT4 = T3.IdT4 WHERE T1.IdT1 = 65955 AND T2.AutreCle IS NULL AND T4.CODE = 'LeCode' AND CONVERT( DECIMAL(9,2) , T2.NouveauPrix ) = 2.8
ça donne aucune ligne
ça donne 2 ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Select * FROM T1 INNER JOIN T2 ON T2.IdT2 = T1.IdT2 INNER JOIN T3 ON T3.IdT3 = T2.IdT3 INNER JOIN T4 ON T4.IdT4 = T3.IdT4 WHERE T1.IdT1 = 65955 AND T2.AutreCle IS NULL --AND T4.CODE = 'LeCode' AND CONVERT( DECIMAL(9,2) , T2.NouveauPrix ) = 2.8
Le "bug" se produit sur la prod et sur mes 4 serveur test sur du 2008R2 et du 2012
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Select * FROM T1 INNER JOIN T2 ON T2.IdT2 = T1.IdT2 INNER JOIN T3 ON T3.IdT3 = T2.IdT3 INNER JOIN T4 ON T4.IdT4 = T3.IdT4 WHERE T1.IdT1 = 65955 AND T2.AutreCle IS NULL AND T4.CODE = 'LeCode' AND CONVERT( DECIMAL(9,2) , T2.NouveauPrix ) = 2.8
Un de vous a-t-il une explication ?
ou un moyen de prévoir ce comportement?
Merci a bientot.
Edit
Après un bon coup de flippe et un rebuild des tout les indexes des 4 tables, tout est a nouveau cohérent.
Partager