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 :

Probleme dans une procedure stockée


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Avatar de malbaladejo
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2002
    Messages : 379
    Points : 527
    Points
    527
    Par défaut Probleme dans une procedure stockée
    Bonjour à tous,

    Dans une prcédure stockée j'ai une première requete qui me renvoie un entier @NB_PART . Je voudrais utiliser @NB_PART pour récupérer les @NB_PART premiers enregistrements d'une seconde requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT @NB_PART =  SUM(ACTPRO_NB_PERS)
    FROM PRODUIT_ACTE
    WHERE ACTPRO_AGE_MIN <> -1
    AND ACT_ID = @ACT_ID
     
    SELECT TOP @NB_PART PARTICIPANT_ACTE.PART_ID
    FROM ACTE INNER JOIN
    PARTICIPANT_ACTE ON ACTE.ACT_ID = PARTICIPANT_ACTE.ACT_ID
    WHERE ACTE.ACT_ID = @ACT_ID
    ORDER BY PARTICIPANT_ACTE.PART_ID
    Malheueusement j'ai une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Incorrect syntax near '@NB_PART'
    Comment faut-il faire ?

  2. #2
    Membre actif Avatar de David.V
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2004
    Messages : 191
    Points : 203
    Points
    203
    Par défaut
    Je crois que tu vas devoir faire une requête dynamique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT @NB_PART =  SUM(ACTPRO_NB_PERS) 
    FROM PRODUIT_ACTE 
    WHERE ACTPRO_AGE_MIN <> -1 
    AND ACT_ID = @ACT_ID 
     
    Declare @StrSQL varchar(2000)
    Set @StrSql = 'SELECT TOP ' + convert(varchar, @NB_PART) + ' PARTICIPANT_ACTE.PART_ID 
    FROM ACTE INNER JOIN 
    PARTICIPANT_ACTE ON ACTE.ACT_ID = PARTICIPANT_ACTE.ACT_ID 
    WHERE ACTE.ACT_ID = @ACT_ID 
    ORDER BY PARTICIPANT_ACTE.PART_ID'
     
    Exec(@StrSQL)

  3. #3
    Membre confirmé
    Avatar de malbaladejo
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2002
    Messages : 379
    Points : 527
    Points
    527
    Par défaut
    Je vois.
    Est-ce que les performances sont diminuées avec une t'elle méthode ?

  4. #4
    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,

    Oui car les plans d'execution ne sont pas reutilises.

    a+
    One ring to rule them all,
    One ring to find them,
    One ring to bring them all
    And in the darkness bind them.

  5. #5
    Membre confirmé
    Avatar de malbaladejo
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2002
    Messages : 379
    Points : 527
    Points
    527
    Par défaut
    Merci Gandalf Le Blanc et David.V.

    S'il n'y a pas d'autre solution, je vais faire comme ça.

  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
    Par contre tu peux utiliser sp_executesql qui permet de faire du sql dynamique tout en reutilisant les plans d'execution.

    a+
    One ring to rule them all,
    One ring to find them,
    One ring to bring them all
    And in the darkness bind them.

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

Discussions similaires

  1. probleme de boucle while dans une procedure stockée
    Par aboulemagnifique dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 08/08/2007, 12h39
  2. Réponses: 6
    Dernier message: 24/09/2004, 13h10
  3. Réponses: 3
    Dernier message: 21/09/2004, 07h35
  4. Réponses: 6
    Dernier message: 05/08/2004, 13h15
  5. [C#] [Oracle] Probleme avec une procedure stockée
    Par sronin1 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 28/05/2004, 19h04

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