2010-06-03 7 views
0

J'ai très longue requête de sélection que je dois filtrer à partir de certains params, je suis en train d'éviter d'avoir différentes procédures stockées ou si des déclarations à l'intérieur de la procédure stockée unique en utilisant TSQL partie dynamique ...Est-ce possible avec une requête TSQL dynamique?

Je vais éviter les longues suffit de sélectionner par exemple bien

select a 
from b 
where [email protected] 
or [email protected] 

@c et @d sont params de filtre, que l'on peut filtrer en même temps, mais aussi les deux filtres peut être désactivé. 0 pour chacun de ces moyens param est désactivable afin que je puisse créer nvarchar avec où l'instruction ...

Comment puis-je intégrer ici une requête dynamique afin que 'où' peut être ajouté à la requête normale. Je ne peux pas ajouter toute la requête en tant que grand nvarchar parce qu'il ya trop de choses en ce qui nécessitera des changements (lorsque son sous-requêtes, rejoint.)

Répondre

5

Que diriez-vous quelque chose comme:

SELECT a 
FROM b 
WHERE (@c IS NULL OR c = @c) 
AND (@d IS NULL OR d = @d) 

Lorsque vous êtes Si vous n'utilisez pas le filtre, réglez le paramètre sur NULL et la condition doit être court-circuitée.

+0

+1 allait suggérer cette chose exacte –

+0

omg ,,,, pourquoi certains ppl sont si intelligents ... juste une petite question, comment puis-je passer avec SqlParam null à partir de ASP.NET sans avoir une exception? Voici comment je définis les paramètres: adp.SelectCommand.Parameters.Add ("@ c", SqlDbType.TinyInt) .Value = someValue; – eugeneK

+0

Ne pas définir la valeur du paramètre lorsqu'elle n'a pas de valeur. –

0

Un peu plus tard, mais

SELECT a FROM b  
    WHERE c = isNULL(@c, c) AND d= isNULL(@d, d)