Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/02/2011, 11h26   #1
Invité de passage
 
Inscription : octobre 2002
Messages : 24
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 24
Points : 0
Points : 0
Par défaut Inclure une Condition dans un "Where"

Bonjour à tous,

Je cherche depuis maintenant quelques jours comment optimiser le code d'une requête.

En fait, cette procédure stockée reçoit des paramètres d'entrée et en fonction d'un d'entre eux, une condition dans un where doit être retiré de cette façon :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT distinct v.IdIlot,v.IDMachine    
    INTO #FR_AD_iIlots
    FROM dbo.verres_rebutes_operation v
        INNER JOIN #FR_AD_substrat sub
        ON v.CodeSubstat = sub.substrat
        INNER JOIN #FR_AD_surf surf
        ON v.CodeProcedeVerre = surf.surf
        INNER JOIN #FR_AD_cellule c
        ON v.Id_Cellule = c.cellule
    WHERE v.CrenduMission = '004'
        AND v.FlagProximity = @proximity
        AND v.CodeRebut = @rebutChoisi
        AND v.datefin BETWEEN @dated AND @datef
Cette ligne en rouge, en fonction de la valeur de @proximity,est conditionnel.
Je comptais mettre en If dedans mais ça ne marche pas : je reçois une erreur disant qu'il existe déjà une table #FR_AD_iIlots.

Pour l'instant, la seule solution que j'ai trouvé est de faire un double de toute la requête (ce que je montre n'est qu'un bout de la qry) avec d'autres noms de tables temporaires ...

Est-ce que vous auriez une idée pour améliorer cela ?

Merci d'avance
the dude est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 11h34   #2
Membre régulier
 
Avatar de Avatar
 
Homme Grégory
Responsable de service informatique
Inscription : juillet 2005
Messages : 113
Détails du profil
Informations personnelles :
Nom : Homme Grégory
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Industrie

Informations forums :
Inscription : juillet 2005
Messages : 113
Points : 95
Points : 95
Envoyer un message via MSN à Avatar
Bonjour,

La solution est d'utiliser l'algèbre de Boole.
Tout est très bien expliqué dans ce site par exemple : http://weblogs.sqlteam.com/jeffs/arc...11/14/513.aspx
Avatar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 17h37   #3
Membre Expert
 
Avatar de Nudger
 
Homme Thomas Arnaud
Directeur de projet
Inscription : octobre 2010
Messages : 452
Détails du profil
Informations personnelles :
Nom : Homme Thomas Arnaud
Âge : 36
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Directeur de projet
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2010
Messages : 452
Points : 1 012
Points : 1 012
Envoyer un message via Skype™ à Nudger
Bonsoir,

Citation:
Envoyé par the dude Voir le message
(...) je reçois une erreur disant qu'il existe déjà une table #FR_AD_iIlots.
Comme l'indique précisément le message d'erreur, il est impossible de créer deux tables portant le même nom.
Et ce même pour des tables temporaires.
Il faut exécuter un drop table #FR_AD_iIlots entre chaque test.
__________________
www.nudge.org Surveillez et optimisez vos applications Java
Nudger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 19h35   #4
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
Bonjour
Une solution serait de remplacer
Code :
AND v.FlagProximity = @proximity
Par
Code :
AND (@proximity IS NULL OR v.FlagProximity = @proximity)
Il y en a surement d'autres.
Cordialement
Soazig
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 08h42   #5
Invité de passage
 
Inscription : octobre 2002
Messages : 24
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 24
Points : 0
Points : 0
merci beaucoup pour toutes ces réponses !!
Effectivement en suivant le lien de Avatar, j'ai pu alléger mon code : merci !!
the dude est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h50.


 
 
 
 
Partenaires

Hébergement Web