Probleme requete SQl SERVER 2005

Résolu
Neyte Messages postés 122 Statut Membre -  
sapma Messages postés 174 Statut Membre -
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

6 réponses

  1. sapma Messages postés 174 Statut Membre 5
     
    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
    1. Neyte Messages postés 122 Statut Membre 16
       
      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
    2. sapma Messages postés 174 Statut Membre 5
       
      Tu ne veux pas utiliser les deux conditions avec un OR ?
      0
    3. sapma Messages postés 174 Statut Membre 5
       
      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
    4. Neyte Messages postés 122 Statut Membre 16
       
      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
    5. sapma Messages postés 174 Statut Membre 5
       
      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
  2. Breub62 Messages postés 3452 Statut Membre 369
     
    where int_num_article IN (SELECT int_num_article FROM article)

    Tout simplement...
    1
    1. sapma Messages postés 174 Statut Membre 5
       
      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
    2. Breub62 Messages postés 3452 Statut Membre 369
       
      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
    3. sapma Messages postés 174 Statut Membre 5
       
      à la limitte je pense qu'il a classé les articles par catégorie et donc ajouter une condition ou deux dans select.
      0
  3. Neyte Messages postés 122 Statut Membre 16
     
    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
  4. Breub62 Messages postés 3452 Statut Membre 369
     
    AND int_num_article=800 serait plus approprié...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Neyte Messages postés 122 Statut Membre 16
     
    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
  7. Breub62 Messages postés 3452 Statut Membre 369
     
    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
    1. Neyte Messages postés 122 Statut Membre 16
       
      ok c'est pas grave merci quand meme.
      @+
      0