2011-09-20 4 views
-2

J'utilise le curseur dans une procédure stockée et il n'y a pas d'autre moyen que le curseur.SQL Server: Performances du curseur

J'ai collé mon script ici. Je veux améliorer les performances de ce curseur. Un petit arrière-plan. Im en passant 'nom' et 'action' et le curseur appelle différentes procédures stockées en retour. J'ai passé un autre paramètre (ID) dans toutes ces procédures stockées. S'il vous plaît améliorer la performance.

ALTER PROCEDURE dbo.Driver_sp 
AS 

TRUNCATE TABLE Driver_tbl 

INSERT INTO Driver_tbl (ID,Name,Action,vipbatchid,processseq) 
SELECT ID,Name,Action,batchid,ProcessSeq 
FROM pcis_tbl 


DECLARE @name varchar(20), 
     @action varchar(20), 
     @ID bigint 

DECLARE cur CURSOR LOCAL FOR 
    SELECT id,name,action FROM Driver_tbl 
    ORDER BY processseq 

OPEN cur 

FETCH NEXT FROM cur INTO @id, @name,@action 

WHILE @@FETCH_STATUS = 0 

BEGIN 

    if (@name = 'A' and @action = 'Update') 
    BEGIN exec A_sp @ID END 
    else 
    if (@name = 'B' and @action = 'Update') 
    BEGIN exec B_sp @ID END 
     else 
     if (@name = 'C' and @action = 'Update') 
     BEGIN exec C_sp @ID END 
     else 
     if (@name = 'D' and @action = 'Update') 
     BEGIN exec D_sp @ID END 


fetch next FROM cur INTO @id, @name,@action 

END 
CLOSE cur 
DEALLOCATE cur 

Merci!

+7

« * il n'y a pas d'autre moyen que le curseur * » Je rejette votre évaluation. – Blindy

+0

Est-ce Transact SQL? –

+3

Si vous créez ces fonctions définies par l'utilisateur, vous n'aurez pas besoin d'un curseur explicite. – TheCodeKing

Répondre

4

En supposant que vous utilisez TSQL, changement déclaration CURSOR pour

DECLARE cur CURSOR FAST_FORWARD FOR