DECLARE CURSOR (Transact-SQL)
http://msdn.microsoft.com/zh-cn/library/ms180169.aspx
READ ONLY 
          禁止通过该游标进行更新。在 UPDATE 或 DELETE 语句的 WHERE CURRENT OF 子句中不能引用游标。
           该选项优于要更新的游标的默认功能。
FORWARD_ONLY 
          指定游标只能从第一行滚动到最后一行。
           FETCH NEXT 是唯一支持的提取选项。
           如果在指定 FORWARD_ONLY 时不指定 STATIC、KEYSET 和 DYNAMIC 关键字,
           则游标作为 DYNAMIC 游标进行操作。
           如果 FORWARD_ONLY 和 SCROLL 均未指定,
           则除非指定 STATIC、KEYSET 或 DYNAMIC 关键字,
           否则默认为 FORWARD_ONLY。STATIC、KEYSET 和 DYNAMIC 游标默认为 SCROLL。
            与 ODBC 和 ADO 这类数据库 API 不同,STATIC、KEYSET 和 DYNAMIC Transact-SQL 游标支持 FORWARD_ONLY。 STATIC 
      定义一个游标,以创建将由该游标使用的数据的临时复本。
       对游标的所有请求都从 tempdb 中的这一临时表中得到应答;
       因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改。

解决方案 »

  1.   

    @teacher_cursor cursor varying output 
    --存储过程用游标作输出参数,varying是"可变的",它与output一起作为游标作存储过程参数的固定格式
    as --声明部分到此结束
    set @teacher_cursor=cursor forward_only static for --给游标变量赋值
    尤其是:cursor forward_only static for
    --forward_only 中能由前向后,汉字意思多,相当于向下吧
    --static是用临时表存储游标数据,因此不会动态更新(即当游标引用的表数据有改变,因为用临时表一次载入,所以后面不会改变)而对应的keyset只在临时表中存入唯一性的键,其它字段动态更新、dynamic则完全动态更新。