SqlServer 游标写法

 SqlServer 游标详细用法

DECLARE cur_wg scroll  CURSOR 		--Scroll:指定游标在定义的数据集中可以向任何方向,或任何位置移动。 		
FOR
    SELECT  test FROM  table
OPEN cur_wg								--打开游标
FETCH first FROM cur_wg INTO @test     --取数据
WHILE ( @@fetch_status = 0 )            --判断是否还有数据
    BEGIN
	
    FETCH NEXT FROM cur_wg INTO @test    --取下一条数据
    END
CLOSE cur_wg								--关闭游标
DEALLOCATE cur_wg                           --释放游标

语法:

DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]   
     [ FORWARD_ONLY | SCROLL ]   
     [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]   
     [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]   
     [ TYPE_WARNING ]   
     FOR select_statement   
     [ FOR UPDATE [ OF column_name [ ,...n ] ] ]  
[;]

参数:

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 并发选项,否则可以更新所有的列。

fetch语句中,SQL Server提供了6种定位选项:

next

返回结果集当前行的下一行,首次提取返回第一行。

frior

返回结果集的上一行,首次提取无数据返回。

first

返回结果集第一行。

last

返回结果集最后一行。

absolute

移动到结果集的第n行。如果n为正数,从结果集的第一行(包含第一行)起移到第n行;如果n为负数,则从结果集的最后一行起移到第n行。

relative

从游标指针的当前位置移动n行。如果n为正数,则读取游标当前位置起向后的第n行数据;如果n为负数,则读取游标当前位置起向前的第n行数据。

你可能感兴趣的:(Sql,sqlserver,数据库)