Bonjour à tous,
Sur SQL Server 2017, je n'arrive pas à comprendre comment une requête est exécutée et surtout comment elle arrive à me faire une erreur.
SELECT MAX(CONVERT(INTEGER, z.NoChrono)) FROM (select * from MaTable INNER JOIN @Temp ON IDtemp = IDMaTable) z;
NoChrono est une colonne de MaTable, de type varchar(50) qui peut parfois contenir des valeurs alphanumériques, mais qui contient uniquement du numérique la plupart du temps.
@Temp est une table temporaire qui est remplie suite à divers traitements, par certains ids de la table MaTable.
La jointure des 2 tables ne doit retourner que des lignes de MaTable ou la colonne NoChrono ne peut contenir qu'un nombre, et c'est bien le cas qu'en je l'exécute seule, je l'ai vérifié.
Cependant, quand j'exécute la requête complète, je me ramasse un message d'erreur Échec de la conversion de la valeur varchar 'AN0001' en type de données int
comme si le convert se faisait sur la totalité de la table physique au lieu de n'être fait que sur le résultat de la jointure. AN0001 est bien une donnée "normale" de cette colonne mais qui est filtrée justement par la jointure pour ne pas être prise en compte.
Je précise que ce code fonctionne sans problème dans les même conditions depuis bientôt 10 ans. Il pête tout d'un coup, là maintenant, sur la base client sans que j'arrive à comprendre pourquoi.
Partager