2010-10-12 6 views
0
DECLARE @cityID bigint; 
set @cityID = NULL 
--set @cityID = 3 

SELECT ID, 
     Name, 
     CityID, 
     IsProvince 
FROM TABLE t 
    WHERE ISNULL(t.CityID, -1) = ISNULL(@cityID, -1) 

chaque fois que le @cityID est NULL le t.CityID est également NULL pour cet enregistrement.sql question, alternative à if-else pour cet exemple?

Un seul enregistrement ne peut jamais être vrai pour IsProvince

Y at-il un moyen de vérifier sans faire la clause if-else si je veux faire ce qui suit:

1) Si le @cityID est NULL, puis obtenir l'enregistrement dont IsProvince est 1

2) Si le @cityID est NOT NULL alors obtenir l'enregistrement dont CityID = @cityID

Merci,

Voodoo

Répondre

1

Vous pouvez le faire dans le OÙ:

DECLARE @cityID bigint; 
set @cityID = NULL 
--set @cityID = 3 

SELECT ID, 
     Name, 
     CityID, 
     IsProvince 
FROM TABLE t 
    WHERE (@cityID IS NULL AND t.CityID IS NULL AND IsProvince = 1) 
      OR (t.CityID = @cityID) 

Cela devrait fonctionner puisque tout = NULL renvoie toujours false. La première clause devrait résoudre votre # 1, et la deuxième résout # 2. Je ne suis pas sûr si vous avez vraiment besoin de la clause t.CityID IS NULL, puisque vos critères pour # 1 ne le mentionnent pas.

Est-ce que cela a du sens?

+0

Cela a du sens, merci. – VoodooChild

+0

Je m'inquiétais de ne pas avoir compris complètement le besoin, donc de demander si cela avait du sens ... – davisoa

+0

:) non, vous l'avez. C'était juste une de ces périodes où votre cerveau frappe un mur de brique et vous commencez à poser vos questions au lieu de penser pendant quelques minutes .... – VoodooChild

Questions connexes