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

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