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 :

Aide pour éviter un curseur!


Sujet :

MS SQL Server

  1. #1
    Membre du Club Avatar de bluecurve
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 68
    Points : 43
    Points
    43
    Par défaut Aide pour éviter un curseur!
    salut a tous j'ai besoin de votre aide afin d'optimiser une procédure stocké utilisant un curseur, parce que la consommation cpu (~67% sur un E6550 ) est délirante ainsi que le temps d'exécution, de plus cette procédure est relancer dès qu'elle prend fin je ne peut donc pas la laisser en l'état.

    voici le monstre:

    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
    CREATE PROCEDURE scheduler_addblock
                       @dmax INT
    AS
     DECLARE @dom_id BIGINT
     DECLARE @btime DATETIME
     SET @btime = ( SELECT GETDATE() ) 
     DECLARE Reader CURSOR FOR
                     SELECT A.dom_id
                     FROM [domain] A,infos B
                     WHERE B.dom_id = A.dom_id AND
                            B.info_download >= @dmax
     OPEN Reader
     
     FETCH NEXT FROM Reader INTO @dom_id
     WHILE @@FETCH_STATUS = 0
      BEGIN
        INSERT INTO blocked(block_type,block_time,dom_id) VALUES(1,@btime,@dom_id)        
      END
     
     CLOSE Reader
     DEALLOCATE Reader            
    GO


    merci a vous

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    Effectivement, le curseur n'a pas grand intérêt dans ce cas là.

    il faudrait essayer à la place du curseur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    INSERT INTO blocked(block_type,block_time,dom_id)
    SELECT 1,@btime,A.dom_id
    FROM [domain] A,infos B
    WHERE B.dom_id = A.dom_id AND
    B.info_download >= @dmax

  3. #3
    Membre du Club Avatar de bluecurve
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 68
    Points : 43
    Points
    43
    Par défaut
    merci de ton aide kagemaru mais la solution que tu me propose ne fonctionne pas sql server me renvoie l'erreur :
    Msg 120, Level 15, State 1, Line 4
    The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    le message d'erreur semble pourtant clair. Le nombre de colonnes de l'insert semble ne pas être le même que le SELECT. Pourtant je vois 3 colonnes côté insert et select.
    J'ose espérer que cette commande a été mise à la place du curseur dans la proc ?
    Sinon que renvoie le select tout seul, sans l'insert ?

Discussions similaires

  1. Requête, pour éviter un curseur
    Par Jinroh77 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/06/2010, 18h10
  2. Aide pour la réalisation d'un curseur
    Par mat75019 dans le forum Développement
    Réponses: 9
    Dernier message: 20/01/2009, 09h17
  3. Aide pour éviter les acces concurents
    Par Mattamore dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/02/2008, 17h43
  4. Formulation d'un UPDATE (pour éviter un curseur)
    Par GoLDoZ dans le forum Oracle
    Réponses: 2
    Dernier message: 15/11/2005, 16h35

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