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 :

affecter ds 1 variable le rés d'une requete créee dynamiquem


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Points : 83
    Points
    83
    Par défaut affecter ds 1 variable le rés d'une requete créee dynamiquem
    Re,

    J'ai découvert tout à l'heure comment l'on pouvait construire des requetes dynamiquement, mais maintenant, j'aimerai pouvoir récupérer des valeurs dans des variables...

    Voici ce que je ne parviens pas à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DECLARE
    	@NbEnfantsComptes DECIMAL(9,0),
    	@cmd NVARCHAR(400)
     
    	SET @cmd='SELECT @NbEnfantsComptes=COUNT(*)
    	   FROM T_LIEN_NS'
     
    	exec (@cmd)
     
    	SELECT @NbEnfantsComptes
    Et voici ce que j'obtiens :
    Serveur : Msg 137, Niveau 15, État 1, Ligne 2
    La variable '@NbEnfantsComptes' doit être déclarée.

    (1 ligne(s) affectée(s))

    Comment faire alors pour affecter dans une variable le résultat d'une requete créee dynamiquement ?!

  2. #2
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Points : 74
    Points
    74
    Par défaut
    Salut

    Enleve le @devant NbEnfantsComptes dans ta requête et ca ira mieux

    A+

  3. #3
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Points : 83
    Points
    83
    Par défaut
    Hélas, ça ne semble pas résoudre mon problème...

    Lorsque je tape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DECLARE 
       @NbEnfantsComptes DECIMAL(9,0), 
       @cmd NVARCHAR(400) 
     
       SET @cmd='SELECT NbEnfantsComptes=COUNT(*) 
          FROM T_LIEN_NS' 
     
       exec (@cmd) 
     
       Raiserror(' = %d ',16,1,@NbEnfantsComptes)
    il me répond :
    NbEnfantsComptes
    ----------------
    69310

    Serveur*: Msg 50000, Niveau 16, État 1, Ligne 10
    = 0
    Donc ma variable ne semble pas affectée !

  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
    t'es obligé de créer une procédure stockée qui contient ton
    'select count(*)
    avec un return @resu)

    regarde l'aide pour RETURN
    A+

  5. #5
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Points : 83
    Points
    83
    Par défaut


    Merci pour cette solution, mais...
    ... n'y aurai-t-il pas moins compliqué à mettre en oeuvre ? sinon, je vais vite me noyer au milieu de centaines de mini procedures stockées !

    L'aide de "return" explique à quoi sert "return" mais ne m'apprends rien de nouveau. (ou alors, je suis passé à coté de quelque chose)

    En fait, ce que j'ai écris plus haut est déjà à l'intérieur d' une procedure stockée. Il y a peut-être moyen de creer en cours d'execution la mini sp un peu comme dans un programme on crée une variable locale. C'est à dire que la mini sp se détruirai toute seule juste après ?!

  6. #6
    Membre averti
    Inscrit en
    Août 2002
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 354
    Points : 398
    Points
    398
    Par défaut
    Slt,

    Il faut passer par une table temporaire pour recuperer ton resultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DECLARE 
       @NbEnfantsComptes DECIMAL(9,0), 
       @cmd NVARCHAR(400) 
     
    create table #tmp (compte int null)
     
       SET @cmd='SELECT COUNT(*) 
          FROM T_LIEN_NS' 
     
       insert into #tmp (compte) 
       exec (@cmd) 
     
       drop table #tmp
    a+

  7. #7
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Points : 83
    Points
    83
    Par défaut
    Alors là, j'ai honte.
    Vous me donnez presque toute la solution, mais ça ne marche toujours pas !

    Lorsque je fait :
    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
    DECLARE 
       @NbEnfantsComptes DECIMAL(9,0), 
       @cmd NVARCHAR(400) 
     
    create table #tmp (compte int null) 
     
       SET @cmd='SELECT COUNT(*) 
          FROM T_LIEN_NS' 
     
       insert into #tmp (compte) exec (@cmd) 
     
       SELECT @NbEnfantsComptes = compte FROM #tmp
     
       drop table #tmp
     
       Raiserror(' = %d ',16,1,@NbEnfantsComptes)
    j'ai l'impression que je ne parviens toujours pas à recupérer le résultat dans ma variable @NbEnfantsComptes. En effet, voici ce qu'il me répond :
    (1 ligne(s) affectée(s))

    Serveur : Msg 50000, Niveau 16, État 1, Ligne 49
    = 0 (alors qu'il devrai avoir écrit : 72488)

  8. #8
    Membre averti
    Inscrit en
    Août 2002
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 354
    Points : 398
    Points
    398
    Par défaut
    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
    DECLARE 
       @NbEnfantsComptes DECIMAL(9,0), 
       @cmd NVARCHAR(400) 
     
    create table #tmp (compte int null) 
     
       SET @cmd='SELECT COUNT(*) 
          FROM T_LIEN_NS' 
     
       insert into #tmp (compte) exec (@cmd) 
     
       SELECT @NbEnfantsComptes = compte FROM #tmp 
     
       drop table #tmp 
     
       select @NbEnfantsComptes

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

Discussions similaires

  1. mettre variable varhcar entre " " dans une requete
    Par laure07 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/05/2012, 11h44
  2. récupérer dans une variable le résultat d'une requete
    Par Stargate SG1 dans le forum Access
    Réponses: 1
    Dernier message: 31/05/2007, 18h08
  3. [Fonction]récuperer dans une variable le résultat d'une requete
    Par nejisama8 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 28/04/2007, 12h34
  4. Affecter le résultat d'une requête à une variable
    Par FreeAdan dans le forum Access
    Réponses: 16
    Dernier message: 10/08/2006, 03h27
  5. Réponses: 5
    Dernier message: 04/05/2006, 21h02

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