运行后报了一大堆的错误 例如: 名为 'c_sub_data' 的游标已存在。 游标已打开。

 

简单看看描述信息,看上去应该是 主存储过程 打开游标后, 子存储过程,再次打开时,抱错了。

去仔细看了看, 发现在定义游标的地方, 有个 LOCAL   关键字。

再回去查询查询 SQL Server 的联机丛书 LOCAL 指定对于在其中创建的批处理、存储过程或触发器来说,该游标的作用域是局部的。该游标名称仅在这个作用域内有效。

GLOBAL 指定该游标的作用域对来说连接是全局的。在由连接执行的任何存储过程或批处理中,都可以引用该游标名称。该游标仅在断开连接时隐式释放。

 

注意:  如果 GLOBAL 和 LOCAL 参数都未指定,则默认值由 default to local cursor 数据库选项的设置控制。 在 SQL Server 7.0 版中,该选项默认为 FALSE,以便与 SQL Server 的早期版本匹配,在早期版本中,所有游标都是全局的。

恩, 看来存储过程, 游标 应该就是默认为 全局的了。 修改一下游标定义的部分 把 DECLARE myCursor CURSOR FOR    SELECT id FROM t1 WHERE id = @id;

修改为

DECLARE myCursor CURSOR   LOCAL   FOR      SELECT id FROM t1 WHERE id = @id;

之后,再次测试运行, 就一切正常了。

posted on 2014-02-17 16:21  清风暮雨  阅读(748)  评论(0)    收藏  举报