我需要一个游标,如何在没有锁的情况下有效地完成这项工作

loy*_*low 0 sql-server cursor

我有一个包含存储过程列表的表.

我使用游标然后循环并调用并捕获每个存储过程的结果(它们都返回0或1).

所以我有:

DECLARE @PROC_ID INT,
        @PROC_NAME VARCHAR(50)

SELECT *
INTO #MY_PROCS
FROM TABLE_PROCS

DECLARE MY_CURSOR CURSOR FOR
SELECT PROC_ID, PROC_NAME
FROM TABLE_PROCS

OPEN MY_CURSOR
FETCH NEXT FROM MY_CURSOR INTO @PROC_ID, @PROC_NAME

WHILE @@FETCH_STATUS = 0
BEGIN
  SELECT @PROC_RESULT = .......

  UPDATE #MY_PROCS SET PROC_RESULT = @PROC_RESULT WHERE PROC_ID = @PROC_ID
END

CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR

DROP TABLE #MY_PROCS
Run Code Online (Sandbox Code Playgroud)

我正在阅读游标,并阅读我应该设置它READ ONLY,NO LOCK如果可能的话.

另外,我应该使用表变量而不是临时表吗?

是否可以用光标做到这一点?

Aar*_*and 5

最有效的游标将是,至少在我的所有测试中:

DECLARE MY_CURSOR CURSOR 
  LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR ...
Run Code Online (Sandbox Code Playgroud)

现在,我们不可能知道你是否可以在没有光标的情况下做到这一点.您已经方便地省略了我们可以用来告诉您的唯一信息.看起来你正在为每个调用调用一个过程,但你不能用SELECT做这个.然后使用结果更新表,但是删除表.