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 :

Curseur sous SQL-Server


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    informatique
    Inscrit en
    Avril 2013
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 280
    Billets dans le blog
    1
    Par défaut Curseur sous SQL-Server
    bonjour,
    j'ai fait un curseur sous sql server qui rame car ça ne s'arrete pas(ça boucle ) et je ne sais pas pourquoi.je rappel que ma requete select me retourne bien des lignes.peut être que c'est le parcours ligne à ligne du curseur avant la mise à jour qui pose problème.
    voici mon curseur:
    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
     
    	declare   @suppl_id decimal(12),
    		  @ord_id decimal(12),
     
    		  @nbr_jour decimal(10,2)
     
         declare   order_day  cursor for 
    		  select SUPPLIER_ID,ORDER_ID,ceiling(avg(nbre_jours))  from
      (select pur_order.SUPPLIER_ID ,pur_order.ORDER_ID,pur_order.ORDER_L_ID,DELIVERY_DATE_DELIVERY_ID,ORDER_DATE_DELIVERY_ID ,
           DELIVERY_DATE_DELIVERY_ID- min(ORDER_DATE_DELIVERY_ID) nbre_jours, order_code_status ,order_status 
          from pur_order, pur_delivery
          where pur_order.ORDER_L_ID = pur_delivery.order_l_id
          and pur_order.supplier_id=pur_delivery.supplier_id group by pur_order.SUPPLIER_ID, pur_order.ORDER_ID, pur_order.ORDER_L_ID, DELIVERY_DATE_DELIVERY_ID, ORDER_DATE_DELIVERY_ID, order_code_status, order_status
         )f
     
         group by SUPPLIER_ID, ORDER_ID  
    	open order_day
    	fetch order_day into  @suppl_id,@ord_id,@nbr_jour
    	while @@FETCH_STATUS =0
     
    	begin
     
    	update pur_order
        set order_avg_delay_first_deliver= @nbr_jour
        where  pur_order.SUPPLIER_ID=@suppl_id
        and  pur_order.ORDER_ID=@ord_id
     
    	fetch order_dayd into  @suppl_idd,@ord_idd,@nbr_jourd
        end
      close order_day
    quelqu'un à t'il une idée avec sans le curseur pour regler mon problème.merci

  2. #2
    Membre éclairé

    Homme Profil pro
    informatique
    Inscrit en
    Avril 2013
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 280
    Billets dans le blog
    1
    Par défaut
    pffff,un simple update avec un select imbriqué me suffisait me suffisait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     update pur_order
        set order_avg_delay_first_deliver= 
    	 (select ceiling(avg(nbre_jours))  from
      (select pur_order.SUPPLIER_ID ,pur_order.ORDER_ID,pur_order.ORDER_L_ID,DELIVERY_DATE_DELIVERY_ID,ORDER_DATE_DELIVERY_ID ,
           DELIVERY_DATE_DELIVERY_ID- min(ORDER_DATE_DELIVERY_ID) nbre_jours, order_code_status ,order_status 
          from pur_order, pur_delivery
          where pur_order.ORDER_L_ID = pur_delivery.order_l_id
          and pur_order.supplier_id=pur_delivery.supplier_id group by pur_order.SUPPLIER_ID, pur_order.ORDER_ID, pur_order.ORDER_L_ID, DELIVERY_DATE_DELIVERY_ID, ORDER_DATE_DELIVERY_ID, order_code_status, order_status
         )f)

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 673
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Pour analyser, il faut à minima les volumétries de chaque table et la description des index
    Votre prédicat de jointure est il sargable ?

    En tout cas, avec 1 requête imbriquée, 2 groupages, des agrégations et un tri, il ne faut pas s'attendre à des miracles si les tables sont volumineuses

  4. #4
    Membre éclairé

    Homme Profil pro
    informatique
    Inscrit en
    Avril 2013
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 280
    Billets dans le blog
    1
    Par défaut
    effectivement mon update ne fonctionne pas car mon select retourne plusieurs lignes.
    comment faire alors

  5. #5
    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
    Par défaut
    Bonjour,

    Que donne ceci ?

    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
     
    WITH CTE AS (
    		  select SUPPLIER_ID,ORDER_ID,ceiling(avg(nbre_jours))  as nbJours
    		  from  (
    			select pur_order.SUPPLIER_ID ,pur_order.ORDER_ID,pur_order.ORDER_L_ID,DELIVERY_DATE_DELIVERY_ID,ORDER_DATE_DELIVERY_ID ,
    						DELIVERY_DATE_DELIVERY_ID- min(ORDER_DATE_DELIVERY_ID) nbre_jours, order_code_status ,order_status 
    			from pur_order, pur_delivery
    			where pur_order.ORDER_L_ID = pur_delivery.order_l_id
    			and pur_order.supplier_id=pur_delivery.supplier_id 
    			group by pur_order.SUPPLIER_ID, pur_order.ORDER_ID, pur_order.ORDER_L_ID, DELIVERY_DATE_DELIVERY_ID, ORDER_DATE_DELIVERY_ID, order_code_status, order_status
    		     )f
     
         group by SUPPLIER_ID, ORDER_ID  
        )
    UPDATE T
    	SET order_avg_delay_first_deliver= nbJours
    FROM pur_order T
    INNER JOIN CTE
    	ON pur_order.SUPPLIER_ID=CTE.SUPPLIER_ID
        and  pur_order.ORDER_ID=CTE.ORDER_ID

  6. #6
    Membre éclairé

    Homme Profil pro
    informatique
    Inscrit en
    Avril 2013
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 280
    Billets dans le blog
    1
    Par défaut
    merci et ça marche!!
    il me fallait remplacer dans ton update
    pur_order.SUPPLIER_ID par T.SUPPLIER_ID
    et pur_order.order_id par T.ORDER_ID

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

Discussions similaires

  1. Equivalent de rownum sous SQL server
    Par Isildur dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/07/2009, 16h48
  2. fermeture d'un curseur sous sql server (2005)
    Par Pol63 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/05/2008, 15h57
  3. Heure sous SQL SERVER
    Par kisscoolfresh dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 30/01/2004, 18h43
  4. Convertir un type de donnée sous SQL Server
    Par Fleep dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/08/2003, 16h15
  5. MAJ d'une table sous SQL Server par insertion
    Par keish dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/06/2003, 17h23

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