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 :

Procédure stockée dans une boucle


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 154
    Points : 124
    Points
    124
    Par défaut Procédure stockée dans une boucle
    Bonjour,

    je sèche depuis un sacré bout de temps et je n'arrive pas à lancer une procédure stocké dans une boucle!

    Ma procédure stockée me retourne de 0 à plusieurs lignes d'un ensemble de tables en fonction des paramètres que je lui passe.

    J'aimerais obtenir pour chaque ligne d'une autre table la liste des lignes retournée par la procédure stockée. Comment faire!

    En gros

    Pour chaque Id de la table1

    cumuler les résultat de EXECUTE MaProcedure Id, 0, 0

    Merci d'avance

    Philippe

  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
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour

    la liste des lignes retournée par la procédure stockée
    A première vue, c'est plutôt une fonction table qu'il vous faut !

    Que fait votre procédure stockée ?

    Vous aurez de meilleurs performances en évitant d'appeler des procédure dans une boucle. Faites tout en une seule requête !

  3. #3
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 154
    Points : 124
    Points
    124
    Par défaut
    Bonjour

    Voici un bout de code!
    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
     
    DECLARE @AnId bigint
     
    CREATE TABLE #TableOut  (animal_id bigint, var2 nvarchar(32), var3 nvarchar(32) )
     
    ???????
    SELECT @AnId = animal_id From dbo.sgpa_animals
    ???????
     
    	BEGIN
    		INSERT INTO #TableOut EXECUTE AnimalNamesFromAnimalId @AnId,0,0
    	END
     
    ?????
    ?????
     
    SELECT * FROM #TableOut

    Ma procédure n'est appelée qu'une fois!

    Philippe

  4. #4
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    A en croire le nom de la procédure stockée, celle-ci vous renvoi le nom d'un animal, en fonction de son ID...

    Pourquoi ne pas aller le chercher directement dans la table depuis votre requête initiale ?

    Y a-t-il un traitement particulier qui est effectué dans l'une de vos SP ?

    Je pense aussi que vous pouvez (devriez) vous passer de votre table temporaire

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Jusque-là cela semble normal, étant donné qu'il n'y a pas de boucle

    En outre, l'utilisation d'un nvarchar est elle requise ?
    Ce type utilise Unicode, qui stocke les caractères de n'importe quel alphabet sur deux octets ...
    Mais si ne stockez que des caractères de l'alphabet latin et des chiffres arabes, alors le type varchar suffit amplement.
    En effet, ce dernier utilise ASCII pour stocker un caractère sur un octet ... mais ne prend en charge que les caractères latins

    Généralement l'utilisation d'une table temporaire peut s'éviter par l'écriture d'une seule requête, ou encore par l'utilisation d'expressions de table commune.
    Si ces deux possibilités ne sont pas implémentables, il 'agit alors d'un problème de modélisation.

    Donnez donc votre boucle, votre table, et un jeu de données, que nous voyions plus en détails ce que voulez faire

    @++

  6. #6
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 154
    Points : 124
    Points
    124
    Par défaut
    Bonjour,

    J'ai plusieurs tables dans mon projet.

    Dans le cas présent, j'ai une table qui contient tout les animaux d'un refuge et une autre table qui contient un historique du changement de nom de chaque animal.

    Donc ma procédure stockée retourne pour chaque Id valable, de un à plusieurs noms avec la date du changement de nom. Donc si un animal à changé trois fois de nom dans sa vie, j'aurai 3 noms.

    Pour faire de la "name completion", j'ai besoin de connaitre tout les noms différents qui se trouve dans la base selon des critères.

    Donc, j'aimerai parcourir la table animal, de prendre l'id de chaque animal pour le donner comme argument à ma procédure stockée.

    Philippe

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Cela me semble inutile puisqu'il vous suffit de faire une jointure entre la table animal et la table historique animal ...

    Cherchez vous à spécifier une liste d'identifiants / noms ?
    Si tel est le cas, une seule requête dans une seule procédure stockée suffit

    @++

Discussions similaires

  1. [SQL-Server] Exécuter une procédure stockée dans une boucle
    Par jacko842 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 22/01/2015, 13h27
  2. Réponses: 5
    Dernier message: 03/11/2011, 17h49
  3. Appel d'une procédure stockée dans une procédure stockée
    Par MrEddy dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/09/2006, 17h17
  4. Réponses: 2
    Dernier message: 20/03/2006, 10h39
  5. Réponses: 3
    Dernier message: 17/01/2006, 18h12

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