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 :

Requete SQL dans boucle while


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 49
    Par défaut Requete SQL dans boucle while
    Voila, petit probleme sur SQLServer (pas forcément spécifique )

    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
     
    Declare @nbMot int,
            @WhereClause  VARCHAR(200),
            @Mot VARCHAR(25)
    Set @nbMot = 2  -- renseigne par parametre transmis
     
     
    while(@nbMot != 0)
    begin
      Set @Mot = 'toto'  -- renseigne par parametre transmis
      --print @nbMot
      AND Description_demande LIKE '%'+@Mot+'%' AND Description_travaux like '%'+@Mot+'%'
      Set @nbMot = @nbMot - 1
     
    end
    L'interet est d'excuter une requete SQL a l'interieur d'une boucle while
    Mais cela ne marche pas alors que :
    si je mets la requete à l'exterieur de la boucle la ca va

    Donc voila je ne maitrise pas SQLServer donc je voudrais avoir votre avis ...

  2. #2
    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 : 48
    Localisation : Congo-Brazzaville

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Mais où est la requête en question ?
    Je la vois pas.

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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 49
    Par défaut
    Citation Envoyé par WOLO Laurent
    Mais où est la requête en question ?
    Je la vois pas.

    Desole, bon voila la requete au complet :

    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
    SELECT *
    FROM Demande_Travaux DT
    WHERE 
    Auteur = COALESCE(param1,Auteur)
    
    Declare @nbMot int,
            @WhereClause  VARCHAR(200),
            @Mot VARCHAR(25)
    Set @nbMot = param2  -- renseigne par les parametres transmis
    
    
    while(@nbMot != 0)
    begin
      Set @Mot = 'toto' -- renseigne par les parametres transmis
      --print @nbMot
      AND Description_demande LIKE '%'+@Mot+'%' AND Description_travaux like '%'+@Mot+'%'
      Set @nbMot = @nbMot - 1
    
    end

  4. #4
    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 : 48
    Localisation : Congo-Brazzaville

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Declare @nbMot int,
    @WhereClause VARCHAR(200),
    @Mot VARCHAR(25)
    Set @nbMot = param2 -- renseigne par les parametres transmis


    while(@nbMot != 0)
    begin
    Set @Mot = 'toto' -- renseigne par les parametres transmis
    --print @nbMot
    SELECT *
    FROM Demande_Travaux DT
    WHERE
    Auteur = COALESCE(param1,Auteur)
    AND Description_demande LIKE '%'+@Mot+'%' AND Description_travaux like '%'+@Mot+'%'

    Set @nbMot = @nbMot - 1

    end
    Quel est l'interêt pour toi de lancer la même deux fois ?

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

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 49
    Par défaut
    Le problème est qu'ici, la requete SELECT va etre effectué plusieurs fois (autant de fois que de mot).
    Alors que moi je souhaite juste répeter la clause
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND Description_demande LIKE '%'+@Mot+'%' AND Description_travaux like '%'+@Mot+'%'
    autant de fois qu'il ya de mot, ainsi j'aurai par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT *
    FROM Demande_Travaux DT
    WHERE 
    Auteur = COALESCE(null,Auteur)
    AND Description_demande LIKE '%'+'mot1'+'%' AND Description_travaux like '%'+'mot1+'%'
    AND Description_demande LIKE '%'+'mot2'+'%' AND Description_travaux like '%'+'mot2'+'%'
    Dans le cas, ou je passe deux mots en parametre de ma requete : mot1 et mot2

    Je sais pas si c'est plus clair....

  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 : 48
    Localisation : Congo-Brazzaville

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    SQL Dynamique oblige....
    C'est pas performant mais c'est le prix à payer.

    Declare @nbMot int,
    @WhereClause VARCHAR(200),
    @Mot VARCHAR(25),
    @sql varchar(8000)

    Set @nbMot = param2 -- renseigne par les parametres transmis

    --On affecte le template
    set @sql='SELECT * FROM Demande_Travaux DT WHERE
    Auteur = COALESCE(param1,Auteur) '

    --Lancement de la boucle :
    while(@nbMot != 0)
    begin
    Set @Mot = 'toto' -- renseigne par les parametres transmis
    --print @nbMot
    set @sql=@sql + '
    AND Description_demande LIKE %' + @Mot + cast(@nbMot as varchar(2)) + '% AND Description_travaux like %' + @Mot + cast(@nbMot as varchar(2)) + %'

    Set @nbMot = @nbMot - 1

    end

    print @sql
    Exec @sql

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 23/09/2011, 18h24
  2. [ODBC] ODBC Access+ requete insert dans boucle while
    Par gpaca dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 17/03/2010, 16h41
  3. [MySQL] Requetes SQL dans une boucle PHP
    Par Siteac dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/11/2006, 14h35
  4. Recuperer un enregistrement de requete SQL dans une variable
    Par kleenex dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 14/09/2005, 15h59
  5. résultat d'une requete SQL dans un tableau en JSP
    Par Paradoxys dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 06/04/2005, 16h17

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