2014-04-17 2 views
0

J'ai un curseur et je cherche à supprimer la procédure stockée et à utiliser une opération basée sur un ensemble ou d'autres méthodes ou suggestions.Besoin de réécrire un curseur

Corrections possibles:

  1. Ajouter la clause du proc existant stocké (Create_Sales_Orders)
  2. Ajouter une boucle While

    WHILE @currentRow<[email protected] 
    BEGIN 
        -- EXEC Create_Sales_Orders 
    
        SET @currentRow = @currentRow + 1 
    END 
    

Mon curseur

DECLARE MyCNT CURSOR FOR 

     ................ 

     -- Select statement Returns 6 columns and 69 rows of data 

     ................ 
    OPEN MyCNT 
      FETCH NEXT FROM MyCNT INTO @StoreId,@DateToProcess,@Cus_source_id,@Cus_id,@Pos_Source_id,@POS_Id 
       WHILE (@@FETCH_STATUS = 0) 
        BEGIN 

         EXEC Create_Sales_Orders --> looking to get rid of this....take a long time to run 
          @StoreId, 
          @DateToProcess, 
          @Cus_source_id, 
          @Cus_id, 
          @Pos_Source_id, 
          @POS_Id  


        FETCH NEXT FROM MyCNT INTO @StoreId,@DateToProcess,@Cus_source_id,@Cus_id,@Pos_Source_id,@POS_Id 
       END 
    CLOSE MyCNT 
    DEALLOCATE MyCNT 
+2

Que signifie 'Create_Sales_Orders' faire? – SWeko

+0

Appelle une série d'insertions et de mises à jour d'une table de transactions de vente .... –

+0

Vous voulez donc réécrire votre SP pour être plus rapide? –

Répondre

0

Vous êtes confronté à un traitement ligne par ligne, du moins sans avoir entièrement incorporé le corps Create_Sales_Orders dans la requête principale, mais cela ne semble pas être une tâche facile ("Appelle une série d'insertions et de mises à jour").

Aucune utilisation de remplacer le curseur avec une autre boucle, utilisez simplement FAST_FORWARD curseur et c'est tout.

0

Je vais réécrire Create_Sales_Orders être plus rapide

Questions connexes