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 :

[Débutant] T-SQL : remplacement de curseurs


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Points : 48
    Points
    48
    Par défaut [Débutant] T-SQL : remplacement de curseurs
    Bonjour à tous,

    Voilà peu de temps que j'utilise le T-SQL , et je me retrouve bloqué sur le sujet suivant : j'ai créé une procédure stockée avec des curseurs et je trouve que le temps d'exécution est trop long.

    Après avoir regardé sur internet et google, j'ai vu des solutions qui permettent de s'affranchir de l'utilisation des curseurs, qui sont gourmands en ressources (en utilisant la condition while exists) ,mais je n'arrive pas à l'appliquer dans mon cas (j'ai les "mauvaises" habitudes du développement procédurale -> opérations itératives) :

    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
    BEGIN TRANSACTION
    		DECLARE Curseur CURSOR FOR
    			SELECT	Nom, COUNT(NumeroIntervention), FluxID
    			FROM	@table_temporaire
    			GROUP BY Nom, FluxID
    		OPEN Curseur 	
    		FETCH NEXT FROM Curseur INTO @nom, @qte, @FluxID
    			WHILE @@FETCH_STATUS = 0 	
    			BEGIN 
    				INSERT INTO @ReturnTable(Operateur, Traites, FluxID) VALUES (@nom, @qte, @FluxID)
    				FETCH NEXT FROM Curseur INTO @nom, @qte, @FluxID
    			END	
    		CLOSE Curseur 	
    		DEALLOCATE Curseur	
    	COMMIT TRANSACTION
    J'utilise le même genre de code pour remplir d'autres colonnes de la table @ReturnTable dans la même procédure stockée, également avec des curseurs, ce qui doit encore alourdir le temps de traitement.

    Pourriez-vous m'aider à m'affranchir de l'utilisation des curseurs ?

    D'avance Merci de votre aide.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    Il semble en effet que dans ton cas le curseur est inutile puisque d'une part, tu possèdes une requêtes, d'autre part une table dans laquelle tu souhaites insérer.
    Par conséquent, tu peux faire un INSERT INTO SELECT comme ci joint
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO @ReturnTable(Operateur, Traites, FluxID) 
    SELECT	Nom, COUNT(NumeroIntervention), FluxID
    			FROM	@table_temporaire
    			GROUP BY Nom, FluxID
    J'espère que cela t'aidera.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Points : 48
    Points
    48
    Par défaut
    merci pour ta réponse, effectivement un simple INSERT INTO suffit (pas besoins de se compliquer avec des WHILE EXISTS).
    En plus ta solution m'a ouvert des pistes pour les autres MAJ de colonne en utilisant UPDATE ... FROM..., je pense que çà devrait réduire pas mal le temps d'exécution et la charge du serveur (je testerai çà demain matin)

    Encore merci ylarvor, j'ai fait un petit tour sur ton blog, il est vraiment très complet et je pense que j'y retournerai d'ici peu .

    Dens19... A la recherche de solutions d'optimisations...

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

Discussions similaires

  1. [PL/SQL] parcours de curseur
    Par NPortmann dans le forum Oracle
    Réponses: 20
    Dernier message: 20/05/2005, 21h51
  2. [SQL] Débutant en sql ...
    Par mpascolo dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/03/2005, 16h16
  3. Réponses: 5
    Dernier message: 23/02/2005, 09h43
  4. [PL/SQL] SQL Dynamique et curseur
    Par Loko dans le forum Oracle
    Réponses: 10
    Dernier message: 23/11/2004, 16h18
  5. [SQL] Remplacer une table
    Par rstephane dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/05/2003, 17h10

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