You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server游标使用报错:Msg 16916,游标ShowSDFinfo不存在

解决游标名称拼写不一致导致的Msg 16916错误

你遇到的Msg 16916错误完全是游标名称拼写不一致导致的——仔细核对你的代码就能发现问题:

在声明游标时,你定义的名称是ShowSFDinfo(字母顺序为S-F-D):

DECLARE ShowSFDinfo CURSOR STATIC LOCAL READ_ONLY FOR ...

但在后续的OPEN、FETCH、CLOSE和DEALLOCATE操作里,你全都写成了ShowSDFinfo(字母顺序为S-D-F)。SQL Server找不到名称为ShowSDFinfo的游标,所以反复抛出“游标不存在”的错误。

修正后的完整代码

只需要把所有游标名称统一成一致的拼写即可,这里我将所有操作的游标名对齐为声明时的ShowSFDinfo(你也可以统一改成ShowSDFinfo,只要全程保持一致就行):

CREATE OR ALTER PROCEDURE testload 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @VantiveOrgID1 VARCHAR(12), 
            @VantiveCustomerName1 VARCHAR(12), 
            @Sector1 VARCHAR(12)

    --DECLARE AND SET COUNTER. 
    DECLARE @Counter INT 
    SET @Counter = 1

    --DECLARE THE CURSOR FOR A QUERY. 
    DECLARE ShowSFDinfo CURSOR STATIC LOCAL READ_ONLY 
    FOR SELECT [Vantive OrgID], [Vantive Customer Name], [Sector] 
        FROM [dbo].[SCASalesOrderExport_20180416] WITH (nolock) 
        WHERE date >= '1/1/18' 
        ORDER BY date DESC;

    --OPEN CURSOR. 
    OPEN ShowSFDinfo;

    --FETCH THE RECORD INTO THE VARIABLES. 
    FETCH NEXT FROM ShowSFDinfo INTO @VantiveOrgID1, @VantiveCustomerName1, @Sector1

    --LOOP UNTIL RECORDS ARE AVAILABLE. 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
        IF @Counter = 1 
        BEGIN 
            SELECT @@CURSOR_ROWS 
        END 
        FETCH NEXT FROM ShowSFDinfo INTO @VantiveOrgID1 ,@VantiveCustomerName1 ,@Sector1 
    END

    CLOSE ShowSFDinfo 
    DEALLOCATE ShowSFDinfo 
END

额外小贴士

  • 编写游标时,建议使用统一的命名规范,或者把游标名称定义为变量,减少手动拼写错误的概率
  • 你已经使用了LOCAL游标,它的作用域仅限于当前存储过程,不会和其他会话的游标产生命名冲突,这是个很好的实践

内容的提问来源于stack exchange,提问作者Arjun R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:30:51