Bonjour,

Je met à jour actuellement un logiciel qui doit déterminer des minutes de communications utilisé sur une carte Fax.

Il y a une table qui contient des données concernant le tarif d'une zone Fax et une autre stockant des minutes de communication.

Une zone est déterminé via des opération complexes et plusieurs requêtes. La base ne pouvant être modifié, ce calcul a été déplace du logiciel vers la base en une fonction.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
dbo.GetZoneFax(doc.AdresseDest)
(AdresseDest est un numero de Fax).

Le gain en utilisant une fonction scalaire lors du calcul a été intéressant.

Seulement voila. Si je souhaite filtrer sur le résultat de cette fonction dans une WHERE, j'ai un message du style:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Echec de la conversion de la valeur VARCHAR '00r' en type de donnée in.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
SELECT     prod.CodeClient, TB_Zones.ZoneId, TB_Zones.Description, SUM(doc.Durée) AS DuréeFax
FROM         TB_Prod AS prod INNER JOIN
                      TB_Doc AS doc ON prod.NomProd = doc.NomProd INNER JOIN
                      TB_Zones ON dbo.GetZoneFax(doc.AdresseDest) = TB_Zones.ZoneId
WHERE  (prod.DateFin < '01/05/2010') AND (prod.DateFin > '01/04/2010') AND (TB_Zones.ZoneId = '01')
GROUP BY prod.CodeClient, TB_Zones.ZoneId, TB_Zones.Description
Après de nombreuses vérification je n'ai aucun numéro de fax qui retourne '00r'.

Si je vire la clause de filtrage (TB_Zones.ZoneId = '01') la requête fonctionne.
Si j'utilise un HAVING pour garder juste les groupes avec la zone '01', j'obtiens le même problème.

Mon collègue et moi avons essayé diverses manière de réécrire la requête mais rien n'y fait.

Et plus bizarre si je met comme clause WHERE (TB_Zones.ZoneId <> '01'), le filtrage marche. Mais avec WHERE NOT (TB_Zones.ZoneId <> '01'), la requête refuse de fonctionner.

Faire un <> de toute les autres zones, donne le résultat attendu par contre.

Ce comportement est très bizarre.

Cordialement