Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : avril 2009
    Messages : 27
    Points : 10
    Points
    10

    Par défaut Passage de paramètre utilisé dans un "IN"

    Bonjour,

    j'ai un soucis d'interpretation lorsque je passe une chaine de caractères à une procédure stockée utilisée dans une base SQL-SERVER 2008. Pour mieux comprendre je vous donne l'exemple suivant:

    1 - Si dans un premier cas j'utilise directement la requête:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DECLARE @maVar VARCHAR(8000)
     
    SET @maVar = '''450'',''452'',''453'',''455'',''454'''
     
    SELECT  e.NumTrain1
    FROM  T_MAGISTER_ETAPE  as e 
    WHERE e.NumTrain1 in ( @maVar ) 
     
    print(@maVar)
    L'affichage de @maVar me donne: '450','452','453','455','454'

    2 - Si je feinte en stockant ma requête dans une variable de typer VARCHAR et que je l'exécute, ca fonctionne comme je le souhaite:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DECLARE @req VARCHAR(8000)
    DECLARE @maVar VARCHAR(8000)
     
    SET @maVar = '''450'',''452'',''453'',''455'',''454'''
     
    SET @req = 'SELECT  e.NumTrain1 
    FROM  T_MAGISTER_ETAPE  as e   
    WHERE e.NumTrain1 in ( ' + @maVar + ' )'
     
    print(@req)
    exec(@req)
    Pourtant l'affichage de @req me donne:

    Code :
    1
    2
    3
    SELECT  e.NumTrain1 
    FROM  T_MAGISTER_ETAPE  as e   
    WHERE e.NumTrain1 in ( '450','452','453','455','454' )
    qui me semble être la même chose que la première requête...

    Me viennent alors plusieurs questions... Quelle en est la raison et y a-t-il une façon d'éviter ce problème? Sinon, si je suis contraint d'utiliser la 2e méthode, ce qui en soit ne me dérange pas, j'ai alors un problème de limite de taille. Comme il est impossible d'utiliser le type texte dans ce cas dans ma procédure stockée, la taille de ma requête est limitée aux 8000 caractères du type VARCHAR, ce qu'il m'arrive de dépasser... Je suis un peu bloqué actuellement et cherche une solution. Pour le moment mon programme passe en paramètre une chaîne de caractères, peut-être qu'il faudrait envoyer un tableau plutôt? Merci d'avance de votre aide!!

    Rudy.

  2. #2
    Membre émérite
    Homme Profil pro Serge RUQUET
    Consultant informatique
    Inscrit en
    août 2006
    Messages
    725
    Détails du profil
    Informations personnelles :
    Nom : Homme Serge RUQUET
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2006
    Messages : 725
    Points : 888
    Points
    888

    Par défaut

    le plus simple est de créer une table temporaire ou tu insères tes valeurs puis tu fais une jointure sur celle ci, c'est plus propre
    Errare humanum est, perseverare diabolicum (Sénèque)

  3. #3
    Membre émérite
    Homme Profil pro Grégory Boge
    Administrateur de base de données
    Inscrit en
    août 2009
    Messages
    603
    Détails du profil
    Informations personnelles :
    Nom : Homme Grégory Boge
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : août 2009
    Messages : 603
    Points : 993
    Points
    993

    Par défaut

    ou utiliser une TVP
    Blog Perso | GUSS.pro | Kankuru (logiciel gratuit pour SQL Server)

  4. #4
    Expert Confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    juillet 2006
    Messages
    3 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : juillet 2006
    Messages : 3 006
    Points : 2 856
    Points
    2 856

    Par défaut

    Gros +1 pour le TVP !

    N.B. : TVP = Table Valued Parameter
    Kropernic (anciennement Griftou).

  5. #5
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : avril 2009
    Messages : 27
    Points : 10
    Points
    10

    Par défaut

    Ok merci de vos réponses je regarde ça immédiatement!

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •