SQL Server paramètre optionnel

Résolu
soleil_levant Messages postés 426 Statut Membre -  
soleil_levant Messages postés 426 Statut Membre -
Bonjour,
Je travaille sur SQL Server. Je suis en train de modifier une de mes procédures stockées. J'ai des paramètres qui doivent changer pour devenir optionnel. C'est à dire que que si le paramètre est vide, je mettrai pas de clause where, sinon la valeur est récupérée. J'ai essayé maintes de fois de faire une valeur par default, mais sans succès :(

Avez vous une idée s'il vous plaît?

Exemple de mon code

USe ... ma base

DECLARE @annee smallint
DECLARE @mois smallint /* ici je veux qu'il soit optionnel */
DECLARE @nom_client varchar(200)

SET Mes variables .. = ...

SELECT * FROM TABLE
WHERE Condition avec tous mes paramètres

Merci d'avance
Configuration: Windows XP
Firefox 3.0.3

4 réponses

  1. soleil_levant Messages postés 426 Statut Membre 32
     
    Merci pour la réponse.
    Je n'ai pas très bien compris. C'est quoi le 1 ==1??
    Pourriez vous m'expliquer d'avantages s'il vous plaît?
    Merci d'avance
    1
  2. Giorgiolino Messages postés 250 Date d'inscription   Statut Contributeur Dernière intervention   52
     
    Salut,

    il y a une astuce qui consiste à rajouter une condition toujours vraie

    WHERE (ta_condition) OR (1 ==1)

    Je n'ai pas testé sous SQL Server mais ça vaut ce que ça vaut.

    Bon courage.
    0
  3. Giorgiolino Messages postés 250 Date d'inscription   Statut Contributeur Dernière intervention   52
     
    Le 1=1 (et non pas 1==1 qui est une erreur de ma part) est une condition
    qui est toujours vraie. ça permet de toujours faire exécuter une requête
    même lorsque la condition préalable est fausse.

    Si tu as fait un peu de logique, [(CONDITION) OR (1=1)] est une proposition logique.
    Dans ta clause WHERE, si tes paramètres sont définis, CONDITION sera évaluée et la requête qui sera exécutée est la suivante :

    SELECT * FROM table WHERE CONDITION.


    A contrario, si tes paramètres ne sont pas définis CONDITION sera fausse. Or (jeu de mot intentionnel) la
    deuxième condition 1 = 1 est toujours vraie. Donc au final la requête exécutée sera la suivante

    SELECT * FROM table 


    AVERTISSEMENT :
    Il faut bien être sûr de ce que tu fais en utilisant ce "truc". Parce que tu as là une requête qui fonctionnera
    toujours même lorsque ta CONDITION est fausse, ce qui est potentiellement dangereux.

    0
  4. soleil_levant Messages postés 426 Statut Membre 32
     
    Merci pour l'explication,

    Je suis passé finalement par les valeurs par défaut (je les affecte à NULL) je fais des IF parametre1 IS NULL Traitement sans utiliser les parametres dans la clause
    Else
    Traitement avec les paramètres dans la clause where
    ENd

    Ca marche très bien du moment ou je les appel pas dans la proc lors de l'exec.

    MErci
    0