2011-09-20 91 views
-2

我在存儲過程中使用遊標,除了遊標以外沒有別的辦法。SQL Server:光標性能

我在這裏粘貼了我的腳本。我想改善這個遊標的性能。 有點背景。我通過'名稱'和'行動'和光標調用不同的存儲過程作爲回報。我已經在所有這些存儲過程中傳遞了另一個參數(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

如果你使這些存儲過程用戶定義函數,你將不需要一個明確的遊標。 – TheCodeKing

回答

4

假設,你使用T-SQL,改變CURSOR聲明

DECLARE cur CURSOR FAST_FORWARD FOR