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 :

remplacer la clause UPDATE dans un curseur


Sujet :

Développement SQL Server

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 4
    Par défaut remplacer la clause UPDATE dans un curseur
    Bonjour à tous,

    j'ai une procédure stockée dans laquelle j'utilise un curseur. Dans la déclaration du curseur, j'utilise une clause UPDATE. Cela a pour conséquence un temps d'exécution énorme. j'ai vu dans la littérature qu'utiliser une clause UPDATE dans un curseur n'était pas conseillé. Je sollicite donc votre coup de pouce à cet effet.

    ci-dessous la procédure stockée:

    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
    CREATE PROCEDURE calcule_ieme_tous3
     
    AS
     
    BEGIN
     
    declare @counter int
    declare @cli int
    declare @max int
     
    declare curs cursor
    for select  distinct cli from tr_cli_qrt2
        order by cli
     
     
    open curs
     
    fetch next from curs into @cli
     
    while @@fetch_status = 0
    begin
     
    set @max=(select Max(ieme) from tr_cli_qrt
    where cli=@cli)
    if (@max=null)
    set @max='0'
    set @counter=@max
     
     
     
     
        update  tr_cli_qrt 
    	set @counter = ieme = @counter + 1
          where cli= @cli 
     
     
        fetch next from curs into @cli
    set @max=@counter
    end
     
    close curs
    deallocate curs
     
     
    END
     
    GO


    le résultat obtenu est le suivant


    cli post_quart expl ieme BP
    539901 A1 840 1 00005
    539902 A2 840 1 00001
    539904 A3 840 1 00001
    539904 A4 840 2 00001
    539905 A5 840 1 00198
    539906 A6 840 1 00464
    539907 A7 840 1 00455
    539909 A8 840 1 00198
    539909 A9 840 2 00198
    539909 A9 840 3 00197
    539911 A10 840 1 00489

    avec la table tr_cli_qrt telle que:
    ->cli int
    ->post_quart char(2)
    -> expl char(3)
    ->ieme int (la colonne du calcul. elle a pour valeur 0 avant le traitement)
    -> BP char(5)


    Merci d'avance!
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. clause LIMIT dans une requête UPDATE
    Par Dominique49 dans le forum Requêtes
    Réponses: 4
    Dernier message: 13/12/2011, 11h06
  2. [ZF 1.10] 2 clauses Where dans un Update
    Par tomtom94500 dans le forum Zend Framework
    Réponses: 1
    Dernier message: 05/07/2010, 11h47
  3. la clause group by dans un curseur explicite
    Par lucaazori1988 dans le forum Oracle
    Réponses: 5
    Dernier message: 29/04/2010, 10h36
  4. Réponses: 7
    Dernier message: 06/09/2006, 15h18
  5. Clause count dans un update
    Par franklin_007 dans le forum Access
    Réponses: 1
    Dernier message: 13/09/2005, 15h40

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