Probleme requete SQl SERVER 2005

Résolu
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. 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
    
    1. 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
    2. Tu ne veux pas utiliser les deux conditions avec un OR ?
    3. 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  
      
      
    4. 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
    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>
  2. where int_num_article IN (SELECT int_num_article FROM article)

    Tout simplement...
    1. 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 ...
    2. 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...)
    3. à la limitte je pense qu'il a classé les articles par catégorie et donc ajouter une condition ou deux dans select.
  3. 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 ;)
    1. 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"
      1. 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+
        1. ok c'est pas grave merci quand meme.
          @+