2011-09-20 2 views
-2

Я использую курсор в хранимой процедуре, и нет другого способа, кроме указателя.SQL Server: производительность курсора

Я вставил свой сценарий здесь. Я хочу улучшить производительность этого курсора. Немного фона. Im передает «имя» и «действие», а курсор вызывает разные хранимые процедуры взамен. Я прошел еще один параметр (ID) во всех этих хранимых процедурах. Улучшите работу.

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 

Спасибо!

+7

«* нет другого пути, кроме курсора *» Я отвергаю вашу оценку. – Blindy

+0

Это Transact SQL? –

+3

Если вы сделаете эти сохраненные функции procs определенными пользователем, вам не понадобится явный курсор. – TheCodeKing

ответ

4

Предполагая, что вы используете TSQL, изменение CURSOR декларации в

DECLARE cur CURSOR FAST_FORWARD FOR 
Смежные вопросы