2010-08-03 8 views
0

J'ai donc une requête. Cela fonctionne si je commente la partie vérifiant l'exclusion. IsExcluded est un champ de bits qui accepte les valeurs NULL.Problème dans la clause WHERE

Toutes les valeurs que je choisis sont NULL, de sorte que DEVRAIT avoir raison. Qu'est-ce que je fais mal? Il ne renvoie aucune valeur comme il est, mais si je commente juste le 'ET' et après, cela fonctionne.

Répondre

9
WHERE H.BatchId = 3 AND (H.IsExcluded != 1 OR H.IsExcluded IS NULL) 
+1

wow Je faisais H.IsExcluded = NULL. JE VOUS REMERCIE! Accepté une fois qu'il me le permet. – Scott

+2

+1 - @Scott - NULL n'a aucune valeur (SQL pense qu'il pourrait avoir n'importe quelle valeur ou aucune valeur), donc il ne répondra pas normalement aux opérateurs. – JNK

+0

Bon à savoir. Je continue d'apprendre. J'ai travaillé professionnellement (après le collège) pendant quelques mois maintenant. Ramasser des trucs au fur et à mesure. – Scott

0

En SQL NULL! = NULL comme dit @scott mais vous pouvez utiliser SET ANSI_NULLS OFF.

Declare @a INT = NULL 
Declare @b INT = NULL 
SET ANSI_NULLS OFF 
IF(@b = @a) 
    PRINT 'NULL is equal to NULL' 
ELSE 
    PRINT 'NULL is not equal to NULL' 

SET ANSI_NULLS ON 
IF(@b = @a) 
    PRINT 'NULL is equal to NULL' 
ELSE 
    PRINT 'NULL is not equal to NULL' 

sortie est:

  • NULL est égal à NULL: ansi_nulls sur OFF
  • NULL est pas égal à NULL: ansi_nulls sur ON, c'est le comportement par défaut de SQL Server.