Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/12/2010, 23h16   #1
Invité de passage
 
Inscription : février 2008
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 5
Points : 3
Points : 3
Par défaut Valeurs NULL non retournés

Bonjour à tous,

J'ai une requête qui sélectionne un des machines dans une BDD SQL-Server.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
SELECT 
	DISTINCT MACHINE_ID, Cost_Center FROM 
        ITEMS
 
WHERE
 
Company = 'CPH ' AND STATUS = 2
 
AND Tier_3 IN ('Desktop','Laptop')
 
AND MACHINE_Role NOT IN ('Kiosk')

La requête exclu les machines quand MACHINE_Role = Kiosk, ce qui est le but, mais aussi celles ou
MACHINE_Role est NULL!

J'ai passé des heures à essayer de trouver la raison sans résultat

J'en appelle à votre savoir


Merci d'avance.
nemoz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 15h51   #2
Membre Expert
 
Homme
Développeur java, access, sql server
Inscription : octobre 2005
Messages : 851
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Développeur java, access, sql server
Secteur : Industrie

Informations forums :
Inscription : octobre 2005
Messages : 851
Points : 1 302
Points : 1 302
C'est en effet un peu déroutant pour qui n'a pas plusieurs siècles d'habitude de SQL ...

Bon, je vais essayer d'être clair :

NULL n'est pas une valeur ... mais l'indication de l'absence de renseignement.

petit exemple sous forme de dialogue :
Citation:
question : quel est la température extérieure ?
réponse : je ne sais pas ...
La valeur du champ "réponse" est ici NULL. Pourtant la température extérieure a bien une valeur !!!

quand tu écris : MACHINE_Role NOT IN ('Kiosk')
SQL Server va soigneusement comparer la valeur qu'il trouve dans le champ MACHINE_Role avec la valeur 'Kiosk'.
Cependant, il ne peut pas comparer une valeur inconnue avec 'Kiosk'.

Voilà pour l'aspect conceptuel

Dans le pratico-pratique, si tu veux aussi avoir les enregistrements avec MACHINE_Role à NULL il faut écrire :
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT 
	DISTINCT MACHINE_ID, Cost_Center FROM 
        ITEMS
 
WHERE
 
Company = 'CPH ' AND STATUS = 2
 
AND Tier_3 IN ('Desktop','Laptop')
 
AND (MACHINE_Role NOT IN ('Kiosk') OR MACHINE_Role IS NULL)
J'aurai plutôt écrit AND (MACHINE_Role <>'Kiosk' OR MACHINE_Role IS NULL)
Le "NOT IN" étant réservé à l'exploitation d'une liste et ralenti la machine
__________________
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser.
First, make it work. Then, make it fast. Finally, make it user-friendly.
Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich.
Népomucène est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 18h13   #3
Invité de passage
 
Inscription : février 2008
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 5
Points : 3
Points : 3
Merci infiniment ton explication m'a épargne beaucoup de migraine!

Mais c'est vrai que c'est déroutant
nemoz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h35.


 
 
 
 
Partenaires

Hébergement Web