Probleme requete SQl SERVER 2005

Résolu/Fermé
Neyte Messages postés 115 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 8 mai 2012 - Modifié par Neyte le 10/06/2010 à 15:18
sapma Messages postés 168 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 7 juin 2011 - 10 juin 2010 à 18:27
Bonjour,

voila , j'ai un soucis de syntaxe je pense :

ce que je voudrais faire :

where int_num_article IN (tous mes numéros d'articles)

mais je ne parviens pas à trouver de syntaxe permettant de faire sa.

merci pour votre aide.

cordialement


A voir également:

6 réponses

sapma Messages postés 168 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 7 juin 2011 5
10 juin 2010 à 16:01
CREATE   PROCEDURE dbo.NomProcedure
(
	@Var1 as int
                @... autre variables
)
AS
IF @Var1 = 1 

	BEGIN
		bla bla

		WHERE  bla bla
		AND int_num_article IN (SELECT int_num_article FROM article) 

	END
ELSE
	BEGIN
		bla bla

		WHERE  bla bla
		AND int_num_article = 800
	END
2
Neyte Messages postés 115 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 8 mai 2012 16
10 juin 2010 à 16:07
Merci beaucoup Sapma ,

C'est donc la seule solution?
Pas moyen d'insérer le if dans mon where histoire de réduire ma requete?

sinon avec ce que tu m'as fourni sa fonctionne merci beaucoup
0
sapma Messages postés 168 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 7 juin 2011 5
10 juin 2010 à 16:35
Tu ne veux pas utiliser les deux conditions avec un OR ?
0
sapma Messages postés 168 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 7 juin 2011 5
Modifié par sapma le 10/06/2010 à 16:44
sinon : tu peux utiliser CASE
CREATE   PROCEDURE dbo.NomProcedure  
(  
 @Var1 as int  
                 
)  
AS  
 BEGIN  
            bla bla  
            WHERE   bla bla  
                CASE WHEN IsNumeric(@Var1) = 1 THEN  
                             AND int_num_article IN (SELECT int_num_article FROM article)    
                 ELSE   
                            AND int_num_article = 800  
                 END                                       
 END  

0
Neyte Messages postés 115 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 8 mai 2012 16
10 juin 2010 à 17:00
Avec le case j'ai des erreurs :

Syntaxe incorrecte vers le mot clé 'CASE'.

Syntaxe incorrecte vers le mot clé 'ELSE'.

voici mon code :

CASE WHEN IsNumeric(@intFDP) = 1 THEN
AND int_num_article IN (SELECT int_num_article FROM article)
ELSE
AND int_num_article = 800
END
0
sapma Messages postés 168 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 7 juin 2011 5
10 juin 2010 à 17:22
essaye ca stp

CREATE PROCEDURE dbo.NomProcedure
(
@Var1 as int

)
AS
BEGIN
bla bla
WHERE bla bla AND int_num_article IN
CASE WHEN IsNumeric(@Var1) = 1 THEN
SELECT int_num_article FROM article
ELSE
800
END
END

</code>
0
Breub62 Messages postés 2989 Date d'inscription lundi 7 juin 2010 Statut Membre Dernière intervention 17 avril 2014 369
10 juin 2010 à 15:23
where int_num_article IN (SELECT int_num_article FROM article)



Tout simplement...
1
sapma Messages postés 168 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 7 juin 2011 5
Modifié par sapma le 10/06/2010 à 15:33
on peut optimiser ? car une select de tous les articles c lourd

tant que c'est un Entier on peut par exemple la faire en Dichotomique ...
0
Breub62 Messages postés 2989 Date d'inscription lundi 7 juin 2010 Statut Membre Dernière intervention 17 avril 2014 369
10 juin 2010 à 15:35
Pas le choix si tu veux vérifier qu'un num_article se trouve dans ta table tu dois forcément les comparer avec un select. Et un select c'est pas bien lourd non plus (enfin je sais pas combien tu a d'enregistrements mais je pense pas des millions...)
0
sapma Messages postés 168 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 7 juin 2011 5
10 juin 2010 à 15:38
à la limitte je pense qu'il a classé les articles par catégorie et donc ajouter une condition ou deux dans select.
0
Neyte Messages postés 115 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 8 mai 2012 16
10 juin 2010 à 15:41
Merci beaucoup Breub62.

j'ai une seconde question vous pourriez peut etre m'aider.

en fait c'est pour une procédure stockée :

@var1

'
'
'
AND int_num_article IN (@var1)

Quand j'appel ma procédure stockée avec en parametre "SELECT int_num_article FROM article" , j'ai un conflit Numeric/varchar(normal)

donc , ce que je voulais faire c'est dans ma procédure un truc du genre

if @var1 = 1
//Ajout de ma clause AND int_num_article IN (SELECT int_num_article FROM article)
else
//ajout de ma clause AND int_num_article IN(800)

mais je ne trouve pas la syntaxe adequate

Si tu as une solution sa serait super ;)
0
Breub62 Messages postés 2989 Date d'inscription lundi 7 juin 2010 Statut Membre Dernière intervention 17 avril 2014 369
10 juin 2010 à 15:44
AND int_num_article=800 serait plus approprié...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Neyte Messages postés 115 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 8 mai 2012 16
10 juin 2010 à 15:47
En effet ,
mais y'a t-il une syntaxe spécifique pour insérer un If dans ma clause where :

where "première condition"
if @var1 = x

alors "AND deuxieme condition avec parametre1"

sinon

"And deuxieme condition avec parametre 2"
0
Breub62 Messages postés 2989 Date d'inscription lundi 7 juin 2010 Statut Membre Dernière intervention 17 avril 2014 369
10 juin 2010 à 15:49
J'ai jamais trop touché aux procédures stockées. Je gère tout par Php... Désolé. Refait un post pour cette question tu sera surement mieux servi.. A+
0
Neyte Messages postés 115 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 8 mai 2012 16
10 juin 2010 à 15:51
ok c'est pas grave merci quand meme.
@+
0