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 :

Déclaration de variable avec valeurs multiples regroupées


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Médecin Département d'Information Médicale (DIM)
    Inscrit en
    Janvier 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Médecin Département d'Information Médicale (DIM)
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2009
    Messages : 115
    Par défaut Déclaration de variable avec valeurs multiples regroupées
    Bonjour

    Je souhaite déclarer des variables regroupées:

    Soit le champ REF qui prend ses valeurs sur 4 caractères selon le modèle suivant: 0001, 0002, 0003, 0004 etc...

    Je veux pouvoir le scinder (par exemple) en

    REF_1 qui comprend les valeurs [0001,0009,0025,0985]
    REF_2 qui comprend les valeurs [0002,0003,0222,0246,0333,0456,0999]
    etc etc...avec les variables REF_X comprenant un nombre variable de valeurs REF sur 4 caractères

    NB: Ces REF sont bien sûr listées dans une table TABLE_REF

    DECLARE @REF_1 (ici je ne sais pas quoi mettre comme format: VARCHAR(xxx)?
    SET @REF_1= [0001,0009,0025,0985] en utilisant la syntaxe correcte, les virgules, les parenthèses ne fonctionnent pas

    pour avoir une requête du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
      FROM MATABLE
        WHERE MATABLE.REF =@REF_1 
           etc...
    Merci de votre réponse

    Cordialement

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    Pouvez vous nous en dire plus sur le contexte, on comprendra surement mieux le but de tout ca. Sur le principe, je pense qu'il vous faut une variable table...

    Mais vous pouvez peut être faire directement une jointure sur la table des références, ce qui serait nettement mieux ?

    Comment est générée et d'ou provient la liste des références pour la requête ?

  3. #3
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Mais vous pouvez peut être faire directement une jointure sur la table des références, ce qui serait nettement mieux ?

    En effet cela me semble surtout être une usine à gaz bien dégueul...

  4. #4
    Membre confirmé
    Homme Profil pro
    Médecin Département d'Information Médicale (DIM)
    Inscrit en
    Janvier 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Médecin Département d'Information Médicale (DIM)
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2009
    Messages : 115
    Par défaut
    Faire une jointure sur ma table des références ne me sert à rien (je sais faire et ce n'est pas ce que je veux car sinon, outre le fait que je l'aurais déjà fait, mon problème est de ne pas perdre mon temps à rentrer des conditions différentes à chaque requête; d'où le principe de la variable ;=)))

    =>Ce que je veux, c'est regrouper un certain nombre de références de cette table (ou d'ailleurs n'importe quelle valeur provenat d'une autre table ou non) et les déclarer en variable. D'autant plus que je veux déclarer PLUSIEURS groupes de variables

    Par analogie, imaginons que je ne veuille déclarer qu'une seule valeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DECLARE @REF CHAR(4)
    SET @REF='0001'
     
    SELECT * FROM MATABLE 
     WHERE MATABLE.MONCHAMP=@REF
    Imaginons maintenant que je veuille PLUSIEURS valeurs (un groupe de plusieurs valeurs) déclarées par variable

    Il faudrait une syntaxe qui fonctionne et me permette par analogie:

    DECLARE @REF CHAR(4)
    SET @REF=('0001','0003','0006') et en l'occurrence peu importe que ces données soient issues d'ailleurs ou non d'une des tables de ma base

    Je crois qu'il y a la possibilité de déclarer des variables '@Tables', chaque table correspond à un certain nombre de valeurs; cela répondrait à mon problème, mais je n'arrive pas à comprendre correctement la syntaxe sur ce que je trouve via Mr google

    Il y aurait quelque chose qui ressemblerait à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DECLARE @TABLE_REF1
    ...
    DECLARE @TABLE_REF_x
    puis il faut la syntaxe pour remplir la table et faire le SET


    Merci

  5. #5
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Créez un userType dans votre base de données de type TABLE avec la structure que vous voulez...

    Ensuite vous pouvez définir cette variable comme variable d'entrée de votre procédure stockée par exemple et l'utiliser comme une table normale...

    Ces tables s'appelles plus communemment Table Valued Parameter (TVP) et peut être manipulé également en C# (sauf LINQ TO SQL je crois).

    Il est toutefois déconseillé de les utiliser pour de la volumétrie (>1000)

  6. #6
    Membre confirmé
    Homme Profil pro
    Médecin Département d'Information Médicale (DIM)
    Inscrit en
    Janvier 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Médecin Département d'Information Médicale (DIM)
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2009
    Messages : 115
    Par défaut
    Merci Iberserk mais si je comprends le principe, je ne sais pas comment faire en pratique car je n'ai pas assez de bagage.

    Je ne connais pas le C# non plus (enfin je veux dire que je n'en connais pas la syntaxe)


    J'imagine quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DECLARE @MATABLEVAR
    (
    MONCHAMP_1 CHAR(4),
    MONCHAMP_2 CHAR(30)
    )
    Mais comment rentrer les différentes valeurs des colonnes de MATABLE?

    Si je prends des valeurs issues d'une table de ma base (ce qui ne règle pas le problème pour des valeurs autres que je souhaiterais renseigner)

    J'essaye cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO @MATABLEVAR (MONCHAMP_1,MONCHAMP_2)
      SELECT MONCHAMP_x, MONCHAMP_y
        FROM MONAUTRETABLE
            GROUP BY MONCHAMP_1,MONCHAMP_2

    Je ne sais pas s'il faut faire comme ça, mais dans l'affirmative, comment faire après?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * 
      FROM ENCOREAUTRETABLE
        WHERE ENCOREAUTRETABLE.MONCHAMP_n IN @MATABLEVAR.MONCHAMP_1
    Cela ne marche pas

    Cordialement

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par Dr_No Voir le message
    et en l'occurrence peu importe que ces données soient issues d'ailleurs ou non d'une des tables de ma base
    Bah si justement, cela à de l'importance. Cela permettrait selon les cas des requêtes plus simples et surtout plus performantes.

    Car votre problème a de nombreuses solutions, de la plus performante, à la plus crade simple :

    Et savoir comment est générée la liste est important, ainsi que son format !

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

Discussions similaires

  1. champ avec valeurs multiples
    Par oyard dans le forum Modélisation
    Réponses: 4
    Dernier message: 29/08/2013, 15h12
  2. Comparaison d'un variable avec valeur dans BDD
    Par voyageurdumonde dans le forum Langage
    Réponses: 9
    Dernier message: 15/09/2010, 17h51
  3. HashTable avec Valeurs multiples
    Par khand dans le forum Langage
    Réponses: 16
    Dernier message: 04/08/2008, 11h23
  4. Macro variable avec valeur contenant &
    Par Fatah93 dans le forum Macro
    Réponses: 2
    Dernier message: 19/05/2008, 15h11
  5. Réponses: 2
    Dernier message: 15/11/2007, 15h15

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