Je veux filtrer un disque ....
Si statusid est null, filtrez l'enregistrement (où statusId n'est pas null)
Si statusid n'est pas null, filtrez l'enregistrement où statusid est égal à statusid spécifié.
Comment puis-je faire cela?
Comme tu as dit
select * from tbl where statusid is null
ou
select * from tbl where statusid is not null
Si votre statusid n'est pas null, alors il sera sélectionné correctement lorsque vous aurez une valeur réelle, inutile de recourir à une logique "si" si c'est ce que vous pensiez
select * from tbl where statusid = 123 -- the record(s) returned will not have null statusid
si vous voulez sélectionner où il est nul ou une valeur, essayez
select * from tbl where statusid = 123 or statusid is null
Qu'en est-il de statusid = statusid. Null n'est jamais égal à null.
WHERE something IS NULL
et
WHERE something IS NOT NULL
set ansi_nulls offgosélectionnez * dans la table t jointure intérieure otherTable o sur t.statusid = o.statusid go
Où que vous essayiez de vérifier la valeur NULL d’une colonne, vous devriez utiliser
EST NULL et EST NON NULLE
Vous ne devez pas utiliser = NULL ou == NULL
Exemple (NULL)
select * from user_registration where registered_time IS NULL
renverra les lignes avec registered_time
la valeur est NULL
Exemple (NOT NULL)
select * from user_registration where registered_time IS NOT NULL
retournera les lignes avec registered_time
la valeur est NOT NULL
Remarque: Le mot clé null
, not null
et is
est not case sensitive
.
Je pense que cela pourrait fonctionner:
select * from tbl where statusid = isnull(@statusid,statusid)