认识——数据库存储过程和游标

来源:互联网 发布:如何开发聊天软件 编辑:程序博客网 时间:2024/05/19 06:35

核心简述

此文章主要向大家讲述的是正确读取SQL Server游标数据的实际操作流程,以及关闭游标调用的Close语句与用Deallocate语句来实现释放游标调用,
以下就是文章的主要内容的详细描述,望大家在浏览之后会对其有更深的了解。

在打开游标以后,使用Fetch语句从Transaction-SQL服务器游标中检索特定的一行。使用Fetch操作,可以使游标移动到下一个记录,并将游标返回的每个列得数据分别赋值给声明的本地变量。

Fetch [Next | Prior | First | Last | Absolute n | Relative n ] From MyCursor
Into @GoodsID,@GoodsName

其中:Next表示返回结果集中当前行的下一行记录,如果第一次读取则返回第一行。默认的读取选项为Next

Prior表示返回结果集中当前行的前一行记录,如果第一次读取则没有行返回,并且把游标置于第一行之前。

First表示返回结果集中的第一行,并且将其作为当前行。

Last表示返回结果集中的最后一行,并且将其作为当前行。

Absolute n 如果n为正数,则返回从游标头开始的第n行,并且返回行变成新的当前行。如果n为负,则返回从游标末尾开始的第n行,并且返回行为新的当前行,如果n为0,则返回当前行。

Relative n 如果n为正数,则返回从当前行开始的第n行,如果n为负,则返回从当前行之前的第n行,如果为0,则返回当前行。

关闭游标调用的是Close语句,方式如下:

Close Global MyCursor Close MyCursor

释放游标调用的是Deallocate语句,方法如下:

Deallocate Glboal MyCursor Deallocate MyCursor

以上的相关内容就是对读取SQL Server游标数据与关闭游标调用的是Close语句等内容的介绍,望你能有所收获。

变量定义

declare 变量定义,定义的变量需要以“@”符号开头
示例: declare @variableName varchar(100)
declare 变量名称 类型(长度)
@variableName 为变量名称,必须“@” 符号开头

游标的使用

定义(创建)游标

declare curosName cursor for select columnName from tableName,游标名称不需要"@"符号开头

打开游标

open curosName,使用open关键字打开游标

读取游标中的数据

FETCH NEXT FROM curosName into @variableName,从游标curosName中获取下一行数据并保存到变量@variableName中

关闭游标

close curosName,使用close关键字关闭游标

释放游标

DEALLOCATE curosName,使用deallocate关键字释放游标

示例:

IF NOT EXISTS(select * from sys_050 where CPRIVILIGENAME in ('修改未归档物料','修改归档物料','删除未归档物料','删除归档物料'))
begin
DECLARE @language_20131121_tech_016 varchar(100)
DECLARE tech_016_cursor_20131121 CURSOR FOR select LANGUAGEKEY from SYS_070 --定义游标
OPEN tech_016_cursor_20131121--打开游标
FETCH NEXT FROM tech_016_cursor_20131121 into @language_20131121_tech_016 --读取游标的第一行数据
WHILE(@@FETCH_STATUS = 0)
BEGIN

INSERT INTO SYS_050 (CPRIVILIGEID,CPRIVILIGENAME,CPRIVILIGETYPE,CPARENTID,PROSTYLE,INTERNATIONKEY)

VALUES ('B060501','修改未归档物料','功能权限','B0605','2010',@language_20131121_tech_016)

FETCH NEXT FROM tech_016_cursor_20131121 into @language_20131121_tech_016--读取游标的下一行数据

END
CLOSE tech_016_cursor_20131121 --关闭游标
DEALLOCATE tech_016_cursor_20131121 --释放游标
end
0 0