2013-03-20 9 views
0

Je veux remplacer le code du curseur de ma procédure stockéeLa meilleure façon de remplacer le curseur dans SQL Server 2008

DECLARE CursorXD CURSOR FOR 
    SELECT 
     IDOrdre, Quantity,fabnum 
    FROM prod_ordreplanificationdetail 
    WHERE fab = @num 
    AND ordre = @ord 

OPEN CursorXD 

FETCH NEXT FROM CursorXD INTO @correctionnumsap, @correctionquantite, @correctionnumfabrication 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    EXEC INSERT#prod @idordre = @correctionnumsap, 
        @quantite = @correctionquantiteneg, 
        @fabnum = @correctionnumfabrication 

    FETCH NEXT FROM CursorXD INTO @correctionnumsap, @correctionquantite, @correctionnumfabrication 
END 

CLOSE CursorXD 
DEALLOCATE CursorXD 

Quelle est la meilleure façon de remplacer ce curseur pour augmenter les performances ??

Une suggestion?

+0

Vous devrez réécrire la procédure stockée appelée dans le curseur pour opérer sur l'ensemble des données qui sont itérées sur le curseur, au lieu de fonctionner sur une ligne à la fois. Tout le reste serait toujours ligne par ligne, ce qui ne serait pas plus efficace que le curseur utilisé ici ... –

+2

Si vous postez la définition de la procédure stockée, nous pouvons vous proposer des suggestions sur la façon dont cela pourrait être fait ... –

+1

Besoin de plus ** Description ** pour le 'exec INSERT # prod' – Sachin

Répondre

3

est ici une option, mais je fait quelques hypothèses

INSERT INTO prod 
SELECT IDOrdre, Quantity,fabnum 
FROM prod_ordreplanificationdetail 
WHERE [email protected] 
    AND [email protected] 

Hypothèses:

  1. prod SP INSERT # ne seulement une INSERT et aucune autre manipulation de données
  2. prod SP INSERT # insère dans une table appelée prod et il n'y a que trois colonnes dans le tableau
0

Vous pouvez utiliser la boucle WHILE au lieu de CURSOR en maintenant la valeur de la nième ligne. Il est trop sage par rapport au CURSOR. Si vous dites clairement ce dont vous avez besoin, nous pouvons marcher sur la même route.

+0

Je ne sais pas si c'est une bonne option viable. – abhi

Questions connexes