IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Sélection de donnée sur un critère ou sur l'ensemble.


Sujet :

Développement SQL Server

  1. #1
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut Sélection de donnée sur un critère ou sur l'ensemble.
    Bonjour à tous.

    J'avoue que j'ai un trou de mémoire sur ce que je vais demander, mais cela fait deux heures que je cherche dans ce forum et je ne retrouve pas le message qui parle de mon sujet, peut-être trop ancien et donc archivé.

    Je voudrais faire une procédure stockée pour faire un SELECT sur une table mais je voudrais que lorsque mon paramettre est renseigné il fasse une clausse where dessus et me retourne les lignes correspondantes.

    Et que, si j'envoile paramettre à vide, c'est du VARCHAR donc j'envoi rien : '', il me retourne toutes les valeurs de la table.
    Et tout cela en sachant que j'ai d'autre clause WHERE.

    Pourriez vous me rappeler la syntaxe à mettre en palce sur les clauses WHERE avec le OR sur le champ concerné.

    Merci et bonne journée.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    WHERE (variable = @variable OR @variable IS NULL)

    ou utiliser les IF variable = @variable ELSE ....

    ++

  3. #3
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Soit une table quelconque avec au moins une colonne id de type int.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Create Procedure MaPS
       @id int = 0
    as
    select * from MaTable where (id = @id or @id=0)
    Voilà comment je fais personnellement. Ici je montre avec un entier mais tu peux faire la même chose avec de l'alphanumérique sans problème.
    N'oublie pas bien sûr d'ajouter tes autres critères de sélection derrière et de remplacer l'astérisque par la liste des champs adéquats.

    Kropernic.
    Kropernic

  4. #4
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci beaucoup pour vos réponses, c'est exactement ce que je cherchais.

    Et oui, plus une seule requête SELCT avec * depuis que j'ai vu les dégats de ressource que cela fait.

    Je vous souhaite une très bonne journée.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  5. #5
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Si on parle de performance le fait d'introduire un OR ne permettra pas d'introduire une recherche d'index.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    declare @id int = 4;
     
    -- 1ère requête --> (id = @id OR @id is null)
    select *
    from MaTable where (id = @id OR @id is null)
     
    -- 2ème requête --> (IF)
    IF @id is not null 
    begin
     SELECT * FROM MaTable WHERE (id = @id);
    end
    else 
    begin
      SELECT * FROM MaTable;
    end
    La seconde requête est plus lourde à l'écriture mais permet d'utiliser une recherche d'index alors que la première ne va générer uniquement qu'un index scan dans les 2 cas.

    ++

  6. #6
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Merci pour cette précision !

    Je procéderai comme cela dorénavant :-)
    (et je signalerai au formateur qu'il raconte à moitié de la merde ^^)
    Kropernic

  7. #7
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    (et je signalerai au formateur qu'il raconte à moitié de la merde ^^)
    Je ne voulais pas f... la m...

    L'exemple ici est simpliste mais il est vrai que l'on a tendance à priviligier l'écriture du code que les performances en général.

    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sélection sur différents critères
    Par hsoulard dans le forum Langage SQL
    Réponses: 15
    Dernier message: 15/06/2011, 15h03
  2. Question sur la sélection de donnée dans une base
    Par Masmeta dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/04/2008, 16h16
  3. Sélection sur un critère avec séparateur.
    Par $p00ky dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 09/12/2007, 17h36
  4. Réponses: 1
    Dernier message: 28/03/2007, 19h20
  5. Sélection sur deux critères
    Par Hbenne dans le forum Access
    Réponses: 2
    Dernier message: 07/04/2006, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo