2013-08-15 2 views
0

J'ai une valeur de bit dans ma table, qui contient le bit (0 ou 1) et la valeur NULL (par défaut).Paramètre de bit avec valeur nulle dans la procédure stockée

Voici mon SProc:

CREATE PROCEDURE msp_CustomerStatistics 
    @Postal_MinValue int, 
    @Postal_MaxValue int, 
    @SubscriberState bit, 
    @CustomerType varchar(50) 
BEGIN 
    [...] 
    WHERE Sub = @SubscriberState 
    AND Postal BETWEEN @Postal_MinValue AND @Postal_MaxValue 
    AND CustType = @CustomerType 
END 

Quand je passe le paramètre @SubscriberState avec 1 ou 0, le résultat est correct. Mais quand je passe null, le résultat est 0, ce qui n'est pas correct.

Si je crée un SQL select avec clause WHERE suivante:

WHERE Sub IS NULL 

Ensuite, le résultat affiche le nombre correct.

Une idée comment je fais ma procédure stockée en utilisant le paramètre NULL dans ma clause WHERE ??

Répondre

2

Vous ne pouvez pas utiliser l'opérateur = avec des valeurs nulles. Les comparaisons avec NULL retournent toujours false. Essayez de modifier votre instruction WHERE à ce qui suit:

WHERE (Sub = @SubscriberState OR (@SubscriberState IS NULL AND Sub IS NULL)) 
+0

ont parfaitement fonctionné! Merci :) – grmihel

1

Vous pouvez soit définir des valeurs NULL à 0 et vérifier comme ceci:

WHERE Isnull(Sub,0) = @SubscriberState 

ou ont une sorte de tri-état de Bodge comme:

WHERE Isnull(Sub,3) = isnull(@SubscriberState,3) 
+0

La question est: est une valeur NULL à traiter de la même comme une valeur de 0, la même que celle d'une valeur de 1, ou une troisième valeur? La valeur NULL n'est pas équivalente à 0 ou 1. –

+0

Comme le dit Philip Kelley, la valeur Null est traitée de la même manière que 0 ou 1 (oui je sais que l'installation est un peu stupide, et devrait être repensée, mais c'est les données J'ai maintenant :)). Pour résumer brièvement, je veux un compte pour chaque valeur séparement: - Combien de 0 - Combien de 1 - Combien de NULL – grmihel

Questions connexes