2009-09-14 5 views
2

Comment utiliser une instruction SQL pour renvoyer toutes les lignes si le paramètre d'entrée est vide, sinon renvoyer uniquement les lignes qui correspondent?Comment faire une instruction SQL pour renvoyer toutes les lignes lorsqu'une variable est vide, sinon renvoyer uniquement correspond

My SQL ressemble à ceci

where person.personstatusuid = @StatusUID 
      AND person.forename != '' 
      AND person.location = @Location 

mais je veux essentiellement, person.location = @location OU @location est vide

Comment puis-je faire? Utilisation de CASE QUAND ...

Répondre

2

Utilisez simplement OU?

where person.personstatusuid = @StatusUID 
AND person.forename != '' 
AND (person.location = @Location or IsNull(@location,'')='') 
1

Vous pouvez utiliser un simple condition OU:

where person.personstatusuid = @StatusUID 
      AND person.forename != '' 
      AND (person.location = @Location OR @Location IS NULL) 
2
SELECT * 
FROM mytable 
WHERE person.personstatusuid = @StatusUID 
     AND person.forename != '' 
     AND person.location = @Location 
UNION ALL 
SELECT * 
FROM mytable 
WHERE person.personstatusuid = @StatusUID 
     AND person.forename != '' 
     AND @Location IS NULL 

Cette solution, contrairement à l'aide OR, est l'indice convivial: il permettra d'optimiser la distance SELECT redondant et utiliser l'index.

Voir cet article dans mon blog pour un problème similaire avec les détails de la performance:

(ceci est pour MySQL, mais applicable à SQL Server tout aussi bien)

1

Si person.location n'autorise pas les nulls, le suivant fonctionnera aussi ...

Ceci suppose que si toutes les lignes sont requises, @Location est passé en tant que null et non en tant que chaîne vide ('')

Questions connexes