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

MS SQL Server Discussion :

Problème avec le WHERE


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Problème avec le WHERE
    Bonjour, j'ai peu de connaissances sur les stored procedures et je dois faire une procédure stockée qui recoit 2 paramètres, le premier est une chaine texte et le deuxième est le nom du champ sur lequel je veux que se fasse la recherche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE PROCEDURE GetResultSearch (@strText varchar(50), @strCritere varchar(50))
    AS
    BEGIN
     
    SELECT Employee.empID, empSurName + ' ' + empName AS FullName, empName, empSurName, vehLicense, 
    vehMake, vehPerNum
     
    FROM Employee INNER JOIN Vehicles
    		ON Employee.empID =  Vehicles.EmpID
     
    WHERE @strCritere LIKE @strText ORDER BY empName
     
    END
    Ma question est de savoir si on peut passer une variable pour le nom du champ dans la clause du WHERE?? Exemple, le @strCritere peut-il recevoir vehLicense ??

    Merci de votre aide !

  2. #2
    Membre habitué
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Points : 151
    Points
    151
    Par défaut
    salut.

    C'est faisable en passant par "SQL Dynamique" ce qui te fera perdre dans
    une certaine mesure l'intéret de la procedure stoquée( précompilation ).
    Une meuilleure et plus simple solution serait de codifier le champ critère:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    CREATE PROCEDURE GetResultSearch (
    /* @Critere :
          NULL : Pas de critère
          1    : empSurName
          2    : empName
          ...
    */
      @strText    Varchar(50), 
      @Critere    Int
    ) AS
    BEGIN
     
      SELECT Employee.empID, 
             empSurName + ' ' + empName AS FullName, 
             empName, empSurName, vehLicense,
             vehMake, vehPerNum
        FROM Employee 
        INNER JOIN Vehicles
          ON ( Employee.empID =  Vehicles.EmpID )
     
        WHERE ( @Critere Is Null ) Or
              ( ( @Critere = 1 ) And ( empSurName LIKE @strText ) ) Or
              ( ( @Critere = 2 ) And ( empName LIKE @strText ) )
        ORDER BY empName
     
    END

  3. #3
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Non, vous devez utiliser du sql dynamique : stockez une requête dans une varriable de type varchar(8000) par exemple puis l'ancer la commande EXEC pour lancer la requête.

    c'est l'unique solution.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  4. #4
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Je suis pour l'option inoussa (si c'est acceptable pour vous et votre problématique) : c'est ce qui sera le plus performant... j'y gérerai par contre les conditions avec un coalesce()
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  5. #5
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Je suis pour l'option inoussa (si c'est acceptable pour vous et votre problématique) : c'est ce qui sera le plus performant... par contre, autant carrément le faire via

    CREATE PROCEDURE GetResultSearch (
    /* @Critere :
    NULL : Pas de critère
    1 : empSurName
    2 : empName
    ...
    */
    @strText Varchar(50),
    @Critere Int
    ) AS
    BEGIN

    if @critere is NULL
    SELECT Employee.empID,
    empSurName + ' ' + empName AS FullName,
    empName, empSurName, vehLicense,
    vehMake, vehPerNum
    FROM Employee
    INNER JOIN Vehicles
    ON ( Employee.empID = Vehicles.EmpID )
    ORDER BY empName
    else
    if @critere =1

    SELECT Employee.empID,
    empSurName + ' ' + empName AS FullName,
    empName, empSurName, vehLicense,
    vehMake, vehPerNum
    FROM Employee
    INNER JOIN Vehicles
    ON ( Employee.empID = Vehicles.EmpID )
    WHERE empSurName LIKE @strText
    ORDER BY empName
    else
    if @critere =2
    SELECT Employee.empID,
    empSurName + ' ' + empName AS FullName,
    empName, empSurName, vehLicense,
    vehMake, vehPerNum
    FROM Employee
    INNER JOIN Vehicles
    ON ( Employee.empID = Vehicles.EmpID )
    WHERE empSurName LIKE @strText
    ORDER BY empName
    END



    END
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  6. #6
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    J'aurai dû opté pour la méthode inoussa, sauf que dans son poste, il n'avait pas précisé la liste des champs qui peuvent faire partie des param de recherche.

    Il s'il peut commuter sur 50 champs !!!

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup pour vos réponses rapides. J'ai résolu mon problème!!

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

Discussions similaires

  1. Problème avec query "where"
    Par Simonox dans le forum Ruby
    Réponses: 0
    Dernier message: 19/05/2015, 10h33
  2. Problème avec condition WHERE dans commande SELECT
    Par Badouba76 dans le forum Objective-C
    Réponses: 3
    Dernier message: 08/11/2013, 18h19
  3. [AC-2007] Problème avec instuctions Where et Select
    Par kedmard dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/04/2012, 11h36
  4. Problème avec une where clause.
    Par Empty_body dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/02/2011, 15h25
  5. Problème avec UNION et WHERE
    Par portu dans le forum Langage SQL
    Réponses: 13
    Dernier message: 20/04/2005, 11h29

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