SQL Server:游标性能

SQL Server:游标性能,sql,sql-server,performance,cursor,Sql,Sql Server,Performance,Cursor,我在存储过程中使用游标,除了游标之外没有其他方法 我已经把我的脚本粘贴在这里了。我想提高这个游标的性能。 有点背景。我正在传递'name'和'action',游标正在调用不同的存储过程作为回报。我在所有这些存储过程中都传递了另一个参数(ID)。请改进性能 ALTER PROCEDURE dbo.Driver_sp AS TRUNCATE TABLE Driver_tbl INSERT INTO Driver_tbl (ID,Name,Action,vipbatchid,processseq)

我在存储过程中使用游标,除了游标之外没有其他方法

我已经把我的脚本粘贴在这里了。我想提高这个游标的性能。 有点背景。我正在传递'name'和'action',游标正在调用不同的存储过程作为回报。我在所有这些存储过程中都传递了另一个参数(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

谢谢

假设您正在使用TSQL,将游标声明更改为

DECLARE cur CURSOR FAST_FORWARD FOR

“除了游标没有其他方法”我拒绝您的评估。如果您使用那些存储的进程用户定义函数,您将不需要显式游标。或者重写为一个以集合方式处理案例的进程。如果您使用的是SQL Server 2008,这可能包括使用表类型的输入变量。请记住,在数据库中,代码重用只需远远超过性能。由于不知道过程的作用,很难充分帮助您提高性能。