J'ai des résultats bizarres sur des requêtes simples. J'ai une table qui se compose de plusieurs champs dont un champ varchar(20) et un champ bit que j'utilise dans mes requêtes.
Le champ varchar permet de restreindre les résultats. La table comporte plus de 6 millions d'enregistrements. Le champ bit permet de distinguer les lignes qui ont subi un traitement des autres. Il vaut soit NULL (non traité), soit 1 (traité).
J'obtiens des résultats différents quand je recherche les lignes non traitées (bit is null). Les résultats varient d'une exécution à l'autre.
Voici les requêtes testées et leurs résultats :
J'obtiens les mêmes résultats si je remplace les * par count(*) au lieu de regarder le nombre de lignes retournées par SQL Query Analyser.
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 select * from ma_table where champ_varchar='valeur' --29339 lignes select * from ma_table where champ_varchar='valeur' and champ_bit = 1 --18854 lignes Ces résultats semblent corrects. select * from ma_table where champ_varchar='valeur' and champ_bit is null --Plusieurs résultats différents au lieu de 10485 attendu : --10689 --29339 --47217 select champ_bit, count(*) from ma_table where champ_varchar='valeur' group by champ_bit -- NULL : 10485 -- 1 : 18854 Ce résultat semble correct. select count(*) from ma_table --6 319 886
La table est-elle corrompue ? Si oui, comment corriger le problème et comment le repérer sur d'autres tables ? SQL Server a t-il un problème avec la gestion de "is null" ?
Pendant mes tests, aucune modification n'a été faite en base. Les données sont fixes.
J'utilise SQL Server 2000 sous Windows 2000 Server.
Merci de votre aide !
Partager