mssql sqlserver 游标用法-游标实现for循环


摘要:
游标:在sql脚本中的功能类似for循环,对一个对象进行循环操作
下文将讲述游标的用法


例:
使用游标遍历一张表(遍历sysobjects 表 输出所有表名)
类似于其它编程语言中的for循环

 declare cursorName cursor scroll dynamic
/*scroll表示可随意移动游标指针(否则只能向前),
dynamic表示可以读写游标(否则游标只读)*/
for
select top 2 [name] from sysobjects

open cursorName
declare @name sysname
fetch next from cursorName into @name
while(@@fetch_status=0)
begin
print '对象名称: ' + @name
--fetch next from my_cursor
fetch next from cursorName into @name
end

--游标的最后循环值将保存在@name变量中
print '对象名称2:'+@name
close cursorName
deallocate cursorName

print '对象名称3:'+@name

mssql_sqlserver_游标用法举例1

mssql_sqlserver_游标用法举例1


----------------------------
使用游标的优点:
在定义游标后,我们需要把数据一次性放入游标变量中(放入内存区域中),
然后一行一行的循环访问数据。
----------------------------
使用游标的步骤:
1 申明游标 并通过for关键字将游标同结果集链接起来
2 打开游标
3 循环游标,并获取游标中的数据
4 关闭游标
------------------------------

1 声明游标方法
declare 游标名称 [INSENSITIVE] [SCROLL] CURSOR [dynamic]
for
[select 获取集合代码块]
------------------------
INSENSITIVE: 禁止游标修改。
SCROLL:游标可以任意移动 ,不输入此关键字 (游标只可向前)
dynamic: 标识游标为读写游标(不输入此关键字游标只读)
------------------------
2 打开游标
open 游标名称
-----------------------

3 获取游标内容
---------------------------------------------------------
FETCH语句是从游标中提取特定的一行。其一般格式为:
FETCH
[[NEXT|PRIOR|FIRST|LAST|ABSOLUTE n|RELATIVE n]FROM]
<游标名>
[INTO:同数据集相同的变量结构]
说明:NEXT——如果是在OPEN后第一次执行FETCH命令,则返回结果集的第一行,否则使游标的指针指向结果集的下一行,NEXT是默认的选项。
PRIOR——返回结果集当前行的前一行。
FIRST——返回结果集的第一行。
LAST——返回结果集的最后一行。
ABSOLUTE n——如果n是正数,返回结果集的第n行,如果n是负数,则返回结果集的倒数第n行

RELATIVE n——如果n是正数,返回当前行后的第n行,如果n是负数,则返回当前行开始倒数的第n行。
INTO——该语句的功能是把游标取出的当前记录送入到主变量,INTO后的主变量要与在DECLARE CURSOR中SELECT的字段相对应。
-------------------------------------------------------

3.1 获取下一条值 fetch next from cursorName into
declare @name sysname
fetch next from cursorName into @name ---获取游标下一条值并放入 @name变量
while(@@fetch_status=0) ---@@fetch_status等于0代表游标获取成功
begin
print '对象名称: ' + @name
fetch next from cursorName into @name ----获取游标下一条值并放入 @name变量中
end
------------------
3.2 获取当前结果集的第一条值
declare @name sysname
fetch PRIOR from cursorName into @name ---
while(@@fetch_status=0) ---@@fetch_status等于0代表游标获取成功
begin
print '对象名称: ' + @name
fetch next from cursorName into @name
end
----------------------------
3.3 获取结果集中的一行记录
declare @name sysname
fetch first from cursorName into @name ---获取游标第一条值并放入 @name变量
while(@@fetch_status=0) ---@@fetch_status等于0代表游标获取成功
begin
print '对象名称: ' + @name
fetch next from cursorName into @name
end
---------------------------
4 关闭游标
close 游标名称
deallocate 游标名称
------------------
close 关闭游标
deallocate 释放游标