Utilisation d'un bit d'input dans une procédure stockée pour déterminer comment filterr les résultats dans la clause where

Je me tape la tête contre le mur ici … je n'arrive pas à find un moyen de m'en débarrasser.

Voici ma configuration:

Ma table a une colonne pour la date à laquelle quelque chose a été terminé. Si ce n'est jamais terminé, le champ est nul. Assez simple.

Sur le frontal, j'ai une checkbox par défaut "Afficher uniquement les inputs incomplètes". Lorsque vous ne tirez que des inputs incomplètes, c'est facile.

SELECT * FROM Sometable WHERE Completed_Date IS NULL 

Mais offrir l'option checkbox complique énormément les choses. Ma checkbox saisit une valeur de bit: 1 = seulement afficher incomplet, 0 = montrer tout.

Le problème est que je ne peux pas utiliser une instruction CASE dans la clause where, car une valeur réelle utilise "=" pour comparer et la vérification de null utilise "IS". Par exemple:

 SELECT * FROM Sometable WHERE Completed_Date IS <---- invalid syntax CASE WHEN ... END SELECT * FROM Sometable WHERE Completed_Date = CASE WHEN @OnlyIncomplete = 1 THEN NULL <----- this translates to "WHERE Completed_Date = NULL", which won't work.. I have to use "IS NULL" ... END 

Une idée de comment accomplir cette tâche facile? Je suis perplexe … merci.

 ... WHERE @OnlyIncomplete = 0 OR (@OnlyIncomplete = 1 AND Completed_Date IS NULL) 

Hmmm … Je pense que ce que tu veux c'est ceci:

 SELECT * FROM Sometable WHERE Completed_Date IS NULL OR (@OnlyIncomplete = 0) 

Donc, cela affichera Date = NULL plus, si OnlyIncomplete = 0, Date! = Null. Oui, je pense que c'est ça.

Si vous voulez toujours utiliser une fonction CASE (même si elle peut être trop lourde dans ce cas):

 SELECT * FROM Sometable WHERE 1 = (CASE WHEN @OnlyIncomplete = 0 THEN 1 WHEN @OnlyIncomplete = 1 AND Completed_Date IS NULL THEN 1 END)