2010-09-27 4 views
1

J'ai une requête dans sql server 2008. Que je veux soit passer une valeur à partir de la liste déroulante ou IS NOT NULL (donc il montre toutes les valeurs). Quelle est la meilleure façon de gérer cela? Je sais que vous ne pouvez pas passer la chaîne "IS NOT NULL" au paramètre. Je suis un peu coincé sur celui-ci.Passer un IS NOT NULL à travers un sqlparameter

ASP.NET 3.5 et SQL Server 2008.

+0

Vous l'utilisez dans un proc stocké? – CristiC

+0

Oui J'utilise un proc stocké. – dotnetN00b

Répondre

5

supposer que ce soit une procédure stockée, que votre paramètre est appelé @Param1, ont le jeu de paramètres NULL pour indiquer IS NOT NULL, comme suit:

SELECT ... 
FROM ... 
WHERE (
      (@Param1 IS NULL AND field1 IS NOT NULL) 
      OR (field1 = @Param1) 
     ) 


suggéré par GSerg

Testing ISNULL(@Param1, field1) = field1 avec le f suivant:

DECLARE @test1 nvarchar(10) = 'testing', 
     @test2 nvarchar(10) = NULL; -- or 'random' or 'testing' 

SELECT 1 
WHERE ISNULL(@test2, @test1) = @test1; 

Les calculs indiquent 1 pour chaque cas. Cela semble être une meilleure solution que ma réponse originale.

+0

C'est ce que j'ai dit mais vous l'avez dit d'abord et mieux. +1 à vous et -1 répondez à moi. ;-) – Chris

+3

... qui peut être simplifié à 'where isnull (@param, field1) = field1'. – GSerg

+0

Merci Chris :) Vous ne méritez pas un -1. Personne ne le fait (c'est ma philosophie sur S.O.) – Codesleuth

1

Vous pouvez utiliser l'opérateur comme:

select * from table1 where name like @param 

mise @param-% si vous voulez des valeurs non nulles. Mais alors vous devez échapper à la %.

Questions connexes