IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

[Procédure stockée]Concaténation dans un IN


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 7
    Points : 7
    Points
    7
    Par défaut [Procédure stockée]Concaténation dans un IN
    Bonjour à tous,

    J'ai actuellement la procédure stockée suivante qui fonctionne correctement, celle ci me permettant de récupérer les N NbrLigne d'une certaine page.
    Mais j'aimerai remplacer la condition "AND (CATDET.CAT = @Cat)" par "AND (CATDET.CAT in (@Cat) )".
    Si j'initialise @cat='11','45' cela ne fonctionne pas car mon champ CATDET.CAT est de type numeric.
    Par contre en écrivant directement (CATDET.CAT in ('11','45') ) cela fonctionne très bien.

    J'ai bien essayé de passer par un exec, mais le "WITH Items as" ne fonctionne pas dans ce cas là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    PROCEDURE MaProcedure
                       @Soc varchar(40),
                       @Fam varchar(40),
                       @CodeLangue varchar(40),
                       @PageIndex int,
                       @NbrLigne int,
                       @Cat varchar(40)
                       
                       AS
    
       SET NOCOUNT ON
    
    	DECLARE @StartRowIndex int;
    
    	-- Prépare la requête de récupération de l'ensemble des éléments --
    	WITH Items as(
    	SELECT     ROW_NUMBER() OVER (ORDER BY Articl.Libart) AS Row, LTRIM(ARTICL.ART) AS Art, ARTICL.LIBART AS Libelle, ARTICL.FAMART AS Codefamille, 
    FAMILL.NOMFAM AS LibelleFamille, SUPFAM.NOMSFA AS LibelleSuperFamille, ARTLEG.LECLEG AS LegendeCourte, Artleg.Lelleg AS LegendeLongue, 
    case Fabric.MarFab when 'OUI' then Fabric.Nomfab else '' end as FabriquantNom
    FROM         ARTICL INNER JOIN
                          FAMILL ON ARTICL.SOCA = FAMILL.SOCA AND ARTICL.FAMART = FAMILL.FAM INNER JOIN
                          SUPFAM ON ARTICL.SOCA = SUPFAM.SOCA AND SUPFAM.SFA = SUBSTRING(CAST(FAMILL.FAM AS varchar), 1, 1) INNER JOIN
                          ARTICS ON ARTICL.SOCA = ARTICS.SOCA AND ARTICL.ART = ARTICS.ART INNER JOIN
                          CATDET ON ARTICS.SOCA = CATDET.SOC AND ARTICS.ART = CATDET.ARTCAD AND ARTICS.ARS = CATDET.ARSCAD LEFT OUTER JOIN
                          FABRIC ON ARTICL.SOCA = FABRIC.SOCA AND ARTICL.FABART = FABRIC.FAB LEFT OUTER JOIN
                          ARTLEG ON ARTICL.SOCA = ARTLEG.SOCA AND ARTICL.ART = ARTLEG.ART AND ARTLEG.LANLEG = @CodeLangue
    WHERE    (FAMILL.SOCA = @Soc) AND (ARTICL.FAMART = @Fam) AND (CATDET.CAT = @Cat) 
    GROUP BY LTRIM(ARTICL.ART), ARTICL.LIBART, ARTICL.FAMART, FAMILL.NOMFAM, SUPFAM.NOMSFA, ARTLEG.LECLEG, Artleg.Lelleg, Fabric.Nomfab,Fabric.MarFab
    	)
    
    
    	-- Récupère les éléments attendus
    	SELECT Art, Libelle, CodeFamille, LibelleSuperFamille, LibelleFamille, LegendeCourte, LegendeLongue, FabriquantNom FROM Items Where Row BETWEEN @StartRowIndex AND @StartRowIndex + @NbrLigne - 1
    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Une solution peut être de passer par une table temporaire, ou une fonction qui te retourne une variable table en parsant ta chaîne, et ensuite de faire qqch comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND (CATDET.CAT IN (SELECT Cat FROM @matabletemporaire))

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup pour la réponse, cela fonctionne parfaitement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/09/2008, 09h53
  2. [procédure stockée] Erreur dans un while
    Par LE NEINDRE dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 19/06/2007, 16h46
  3. Réponses: 11
    Dernier message: 12/04/2007, 22h13
  4. Procédure stockée, concaténation dans requête
    Par sbeu dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/08/2005, 12h03
  5. procédure stockée Oracle dans delphi 6
    Par UPNE387 dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/05/2004, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo