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

Développement SQL Server Discussion :

Passage de paramètre utilisé dans un "IN"


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 27
    Points : 23
    Points
    23
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    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 éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    ou utiliser une TVP
    Blog Perso | 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 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Gros +1 pour le TVP !

    N.B. : TVP = Table Valued Parameter
    Kropernic

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    Ok merci de vos réponses je regarde ça immédiatement!

Discussions similaires

  1. [XSL-FO] Passage de paramètre utilisé dans un call-template
    Par stujava dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 04/03/2015, 11h18
  2. Probleme passage de paramètres à EventListener dans boucle for
    Par bigboss87 dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 14/08/2009, 12h23
  3. Passage de paramètres php dans un HREF
    Par duckaurore dans le forum Langage
    Réponses: 4
    Dernier message: 08/01/2007, 16h39

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