游标的定义:
游标则是处理结果集的一种机制,它可以定位到结果集中的某一行,也可以移动游标定位到你所需要的行中进行操作数据。与 select 语句的不同是,select 语句面向的是结果集,游标面向的是结果集的行。 游标其实可以理解成一个定义在特定数据集上的指针,我们可以控制这个指针遍历数据集,或者仅仅是指向特定的行。
游标的生命周期:
游标的生命周期包含有五个阶段:声明游标、打开游标、读取游标数据、关闭游标、释放游标。
–申明一个游标
DECLARE cursor_name CURSOR
FOR SELECT 字段 FROM 表
–打开一个游标
OPEN cursor_name
–循环一个游标
注意:@后面是指声明的变量
DECLARE @BookName nvarchar(2000),@BookCoding nvarchar(2000)
FETCH NEXT FROM cursor_name INTO @BookName,@BookCoding
WHILE @@FETCH_STATUS =0
BEGIN
print ‘name’+@BookName
FETCH NEXT FROM cursor_name INTO @BookName,@BookCoding
END
–关闭游标
CLOSE cursor_name
–释放资源
DEALLOCATE cursor_name
cursor_name:游标的名称
Local:局部游标,只在定义它的批处理,存储过程或触发器中有效。
Global:全局游标,在由此连接执行的任何存储过程或批处理中,都可以引用该游标。该游标仅在断开连接时隐式释放。
如果未指定游标作用域,那么默认为全局游标。
Forward_Only:指定游标只能从第一行滚动到最后一行。 FETCH NEXT 是唯一支持的提取选项。
Scroll:指定游标在定义的数据集中可以向任何方向,或任何位置移动。
如果在指定 FORWARD_ONLY 时不指定 STATIC、KEYSET 和 DYNAMIC 关键字,则游标默认为 DYNAMIC 游标进行操作。
如果 FORWARD_ONLY 和 SCROLL 均未指定,那么除非指定了 STATIC、KEYSET 或 DYNAMIC 关键字,否则默认值为 FORWARD_ONLY。
STATIC、KEYSET 和 DYNAMIC 游标默认为 SCROLL。
Static:指定为静态游标
KeySet:指定为键集游标
Dynamic:指定为动态游标,动态游标不支持 ABSOLUTE 提取选项。
Fast_Forward:指定为启用了性能优化的 FORWARD_ONLY、READ_ONLY 游标。 如果指定了 SCROLL 或 FOR_UPDATE,则不能同时指定 FAST_FORWARD。
Read_Only:只读,即不能通过游标对数据进行更新操作。
Scroll_Locks:将读入游标的所有数据进行锁定,防止其他程序进行更改,以确保更新的绝对成功。如果还指定了FAST_FORWARD或STATIC,则不能指定SCROLL_LOCKS。
Optimistic:不锁定任何数据,当需要在游标中更新数据时,如果底层表数据更新,则游标内数据更新不成功,如果底层表数据未更新,则游标内表数据可以更新。如果指定了 Fast_Forward ,则不能指定它。
Type_Warning:指定如果游标从所请求的类型隐式转换为另一种类型,则向客户端发送警告消息。
select_statement:定义游标结果集的标准 SELECT 语句。
For Update[of column_name ,…]:定义游标中可更新的列。如果指定了 UPDATE,也指定了列,仅指定的列进行修改。如果指定了 UPDATE,但未指定列,则除非指定了 READ_ONLY 并发选项,否则可以更新所有的列