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 :

[SQL SERVER 2000] Noms de variables dynamiques


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 14
    Points : 13
    Points
    13
    Par défaut [Résolu][SQL SERVER 2000] Noms de variables dynamiques
    Bonjour, j'aimerai savoir si il est possible de créer des noms de variables dynamiques au sein d'une procedure stockée.

    Ceci dans le but de récupérer des valeurs sans avoir à traiter tous les cas.

    Voici ce que j'essai de faire :

    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
     
    set @i = 1 ;
    declare Curseur cursor for 
    select id_article from age.tl_ligne_suppl where id_ligne_cmde = @id_ligne_cmde ;				
     
    open Curseur ;
    fetch Curseur into @id_article ;
    while @@fetch_status = 0
      begin
        set @code_suppl = ( select code_article from age.article where id_article = @id_article ) ;
     
       set @code_suppl_+@i = @code_suppl ;
     
       set @i = @i + 1 ;
     
    fetch CurseurSuppl into @id_article ;
    end
    close Curseur ;
    deallocate Curseur ;
    J'aimerai obtenir quelque chose comme ca :

    @code_suppl_1 = 102385 ;
    @code_suppl_2 = 127845;
    etc.


    Merci beaucoup

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    tu veux en faire quoi des tes variables @code_suppl_XXXX ?

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par ZERS
    tu veux en faire quoi des tes variables @code_suppl_XXXX ?
    Elles me servent apres dans un insert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into (code_suppl_x, code_suppl_y) values (+ @code_suppl_x etc.
    voila ...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    tu veux mettre des données initialement en ligne dans une seule ligne mais plusieurs colonnes c'est ca ?

    exemple :

    source :
    1 3
    2 4
    3 67

    devient

    3 4 67 ?

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Non ce n'est pas ca ma question, je veux savoir si on peut faire ca en transcat SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     set @code_suppl_+@i = @code_suppl ;
    ou i est incrémenté de 1 à chaque tour de boucle.
    C'est a dire que je crée dynamique le nom de la variable à chaque tour de boucle et que je lui assigne une valeur plutot qe de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( @i = 1 )
       set @code_suppl_1 = val (peu importe)
    if ( @i = 2 )
       set @code_suppl_2 = autre_val ...
    etc.

    Pour l'instant ca va j'ai que 5 codes possibles mais si le nombre augmente la deuxième solution est rès lourde.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    t'enerve pas

    j'esssaie de comprendre ton code pour savoir ce que tu veux faire, afin de voir si y'a pas un moyen plus simple...

    car créer dynamiquement des variables est très lourd comme tu le dis si bien

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Excuse je m'enerve pas mais c'est assez compliqué.

    en fait je récupère des identifiants dans une vue que j'utilise pour récupérer des codes de produits (les fameux codes suppl) dans une table de liaison.

    Tout ceci dans le but de stocker ces codes dans 5 champs d'une table temporaire qui est ensuite transformer en fichier d'export.

    Le truc c'est que ces 5 champs ne sont pas forcement renseignés à chaque tour de boucle sur un curseur qui recupère les données de la vue.
    Je ne peux donc pas t'expliquer dans le detail le devenir de ces données.

    Je veux juste savoir si comme je le ferai dans un autre langage, je peux faire var_+ i pour obtenir :
    var_1
    var_2
    etc.

    Merci

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Citation Envoyé par cassoulet
    Je veux juste savoir si comme je le ferai dans un autre langage, je peux faire var_+ i pour obtenir :
    var_1
    var_2
    etc.
    Ca je peux te dire que non, sauf à coder en dynamique les requete dans une variable nvarchar mais tu seras vite bloqué car varchar = 3000 caractéres max.
    N'oublie pas qu'en SQL tu es forcé de déclarer toutes les variables donc en créer dynamiquement c'est le mer**de.

    Mais si j'ai bien compris, tu as un nombre fixe de code (5) au maximum.

    Il me semble donc plus logique de gérer cela de manière statique non ?

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par ZERS
    Il me semble donc plus logique de gérer cela de manière statique non ?
    Oui c vrai c'est pour cela que j'ai traité cela avec les if et pour l'instant cette solution, meme si elle n'est pas très jolie, me convient parfaitement.

    Si tu as une autre idée, je suis ouvert ....

    Autrement merci beaucoup

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    est-ce que cela te convient ?
    Pour te mettre dans ton contexte, imagine que la première colonne de la tabke "fluck" c'est id_article de ta table age.tl_ligne_suppl,
    et que la deuxième c'est code_article de ta table age.article (j'ai eu la flemme de créer deux tables )

    A priori ca fait ce que tu veux, tu n'as plus qu'à exporter la table tblVAL

    J'ai mis des valeurs "null" pour te montrer que ca marche

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    create table fluck
    (
    code int null,
    vl int null)
     
    delete from fluck
    insert into fluck
    select 1, 16
     
    insert into fluck
    select 2, 3
     
    insert into fluck
    select 3, null
     
    insert into fluck
    select 4,99
     
    insert into fluck
    select 5, null
     
    insert into fluck
    select 6,78
     
    create table tblVAR (nom_variable1 varchar(500) null)
    insert into tblVAR  select 'toto'
     
    declare @i int
    set @i=1
     
    declare @code int
    declare @val varchar(500)
    declare @cmd nvarchar(3000)
     
    declare curs_fluck cursor for
    select distinct code from fluck
    order by CODE
     
    open curs_fluck
     
    fetch next from curs_fluck into @code
    while (@@fetch_status =0)
    begin
     
    	select @val = isnull(convert(varchar(500), vl), null) from fluck
    	where code = @code
     
    	if (@i > 1)
    	begin	
    		set @cmd = 'alter table tblVAR add nom_variable' + convert(sysname, @i) + ' varchar(500) null '
    		exec (@cmd)
    	end 
     
    	set @cmd = 'UPDATE tblVAR set nom_variable' + convert(sysname, @i) + ' = ' + @val
    	exec (@cmd)
     
    	set @i = @i +1
    	fetch next from curs_fluck into @code
    end
    close curs_fluck
    deallocate curs_fluck
    --ensuite tu exportes ta table tblVAR 
    select * from tblVAR 
    drop table tblVAR 
    drop table fluck
    Modéré par Fadace
    Sans commentaire

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

Discussions similaires

  1. SQL SERVER 2000, Variable dans un nom (lot dts)
    Par Aeltith dans le forum Développement
    Réponses: 1
    Dernier message: 25/08/2010, 14h14
  2. [MS SQL SERVER 2k5]nom de table dynamique dans un curseur
    Par patriceharel dans le forum Développement
    Réponses: 2
    Dernier message: 16/12/2008, 11h03
  3. [SQL SERVER 2000] Problème sqlstring variable server
    Par akrem dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/04/2007, 12h35
  4. [SQL Server 2000] Select from @variable
    Par chorokari dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/12/2006, 12h58
  5. [SQL Server 2000] requête avec le nom de la table dynamique
    Par insane_80 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/12/2006, 17h57

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