SQL游标使用及实例
declare my_cursor cursor scroll dynamic
for
select * from t_msg
open my_cursor
declare @name sysname
fetch next from my_cursor into @name
while(@@fetch_status=0)
begin
print 'UserName: ' + @name
--fetch next from my_cursor
fetch next from my_cursor into @name
end
--fetch first from my_cursor into @name
print @name
close my_cursor
deallocate my_cursor
使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。
2. 如何使用游标:
一般地,使用游标都遵循下列的常规步骤:
(1) 声明游标。把游标与T-SQL语句的结果集联系起来。
(2) 打开游标。
(3) 使用游标操作数据。
(4) 关闭游标。
2.1. 声明游标
DECLARE CURSOR语句SQL-92标准语法格式:
DECLARE 游标名 [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR sql-statement
Eg:
Declare MycrsrVar Cursor
FOR Select * FROM tbMyData
2.2 打开游标
OPEN MycrsrVar
当游标被打开时,行指针将指向该游标集第1行之前,如果要读取游标集中的第1行数据,必须移动行指针使其指向第1行。就本例而言,可以使用下列操作读取第1行数据:
FETCH FIRST from E1cursor
或 FETCH NEXT from E1cursor
2.3 使用游标操作数据
下面的示例用@@FETCH_STATUS控制在一个WHILE循环中的游标活动
DECLARE E1cursor cursor
FOR SELECT * FROM c_example
OPEN E1cursor
FETCH NEXT from E1cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT from E1cursor
END
CLOSE E1cursor
DEALLOCATE E1cursor
2.4 关闭游标
使用CLOSE语句关闭游标
CLOSE { { [ GLOBAL ] 游标名 } | 游标变量名 }
使用DEALLOCATE语句删除游标,其语法格式如下:
DEALLOCATE { { [ GLOBAL ] 游标名 } | @游标变量名
3. FETCH操作的简明语法如下:
FETCH
[ NEXT | PRIOR | FIRST | LAST]
FROM
{ 游标名 | @游标变量名 } [ INTO @变量名 [,…] ]
参数说明:
NEXT 取下一行的数据,并把下一行作为当前行(递增)。由于打开游标后,行指针是指向该游标第1行之前,所以第一次执行FETCH NEXT操作将取得游标集中的第1行数据。NEXT为默认的游标提取选项。
INTO @变量名[,…] 把提取操作的列数据放到局部变量中。列表中的各个变量从左到右与游标结果集中的相应列相关联。各变量的数据类型必须与相应的结果列的数据类型匹配或是结果列数据类型所支持的隐性转换。变量的数目必须与游标选择列表中的列的数目一致。
--------------------------------------------------------------------------------------------------------------------------------
每执行一个FETCH操作之后,通常都要查看一下全局变量@@FETCH_STATUS中的状态值,以此判断FETCH操作是否成功。该变量有三种状态值:
? 0 表示成功执行FETCH语句。
? -1 表示FETCH语句失败,例如移动行指针使其超出了结果集。
? -2 表示被提取的行不存在。
由于@@FETCH_STATU是全局变量,在一个连接上的所有游标都可能影响该变量的值。因此,在执行一条FETCH语句后,必须在对另一游标执行另一FETCH 语句之前测试该变量的值才能作出正确的判断。
更新数据;
declare my_youbiao cursor
for select * from t_msg
for update
open my_youbiao
fetch next from my_youbiao
while @@fetch_status=0
begin
--update t_msg set msg='1234567890' where current of my_youbiao
update my_youbiao set msg='123' where current of my_youbiao
fetch next from my_youbiao
print 'asdfasd11'
end
close my_youbiao
deallocate my_youbiao
print 'asdfasd'
测试通过:

--select * frommaster..sysprocesses
use test
declare my_cursorcursor scroll dynamic--scroll表示可以向前或向后移动
dynamic:表示可写也可读,
for
select F3fromtemp --定义my_cursor 游标

open my_cursor--打开游标
declare@namenvarchar(128)--定义一个变量
fetchnextfrom my_cursorinto
@name --游标停在第一条记录前面,第一次执行,测试有没有记录存在
while(@@fetch_status=0)--取数据,直到-2即没有记录
begin
print'姓名:' +
@name
--fetch next from my_cursor
fetchnextfrom my_cursorinto
@name
end
--fetch first from my_cursor into @name
print@name
--update temp set F9='zzg' where current of my_cursor

close my_cursor
deallocate my_cursorSQL游标使用及实例的更多相关文章
- 网上看到一份详细sql游标说明 《转载 https://www.cnblogs.com/xiongzaiqiren/p/sql-cursor.html》
SQL游标(cursor)详细说明及内部循环使用示例 游标 游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果.每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获 ...
- OCM_第十五天课程:Section6 —》数据库性能调优 _SQL 访问建议 /SQL 性能分析器/配置基线模板/SQL 执行计划管理/实例限制
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...
- 利用navicat创建存储过程、触发器和使用游标的简单实例
利用navicat创建存储过程.触发器和使用游标的简单实例 标签: navicat存储过程触发器mysql游标 2013-08-03 21:34 15516人阅读 评论(1) 收藏 举报 分类: 数 ...
- SQL语句学习手册实例版
SQL语句学习手册实例版 表操作 例1 对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE TABLE STUDENTS (SNO NUMERIC (6, ...
- 由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例。该连接将关闭。
错误:由于启动用户实例的进程时出错,导致无法生成SQL Server的用户实例. 原因:添加安装SQLEXPRESS时,估计装在了不同的目录下: 解决方法:关闭Sqlserver及相关的程序,删除目录 ...
- SQL迁移到ORACLE实例
nohup ./command.sh > output 2>&1 & SQL迁移到ORACLE实例 日常运维中,我们经常会有数据库不同类型的迁移,比较多的就是从sql se ...
- sql 游标例子 根据一表的数据去筛选另一表的数据
sql 游标例子 根据一表的数据去筛选另一表的数据 DECLARE @MID nvarchar(20)DECLARE @UTime datetime DECLARE @TBL_Temp table( ...
- sql 游标循环当中重新赋值
sql 游标循环当中的变量必须重新赋值不然变量的值就是前次循环的值
- 由于检索用户的本地应用程序数据路径时出错,导致无法生成 SQL Server 的用户实例
/”应用程序中的服务器错误. 由于检索用户的本地应用程序数据路径时出错,导致无法生成 SQL Server 的用户实例.请确保该用户在此计算机上有本地用户配置文件.该连接将关闭. 堆栈跟踪: [Sql ...
随机推荐
- vsftp 的安装及配置
安装vsftpd 直接用 yum安装,方便的很 yum -y install vsftpd #进入vsftpd目录cd /etc/vsftpd/ #Create The Virtual Users D ...
- inotify-tools使用方法详解
inotify-tools 是为linux下inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件. inotify-tools是用 ...
- vsftp实现只能上传不能下载、删除权限配置
vsftpd可以对每个用户特别限制.只要给那个用户建立一个设置文件,然后在文件里设置 在vsftpd.conf里加user_config_dir=/etc/vsftpd/vsftpd_user_con ...
- BZOJ 2806: [Ctsc2012]Cheat [广义后缀自动机 单调队列优化DP 二分]
2806: [Ctsc2012]Cheat 题意: 多个主串和多个询问串,每次询问将询问串分成多个连续子串,如果一个子串长度>=L且在主串中出现过就是熟悉的 如果熟悉的字符串长度>=询问串 ...
- 【模板小程序】循环方阵构造(仿《剑指offer》循环矩阵打印)
/* 本程序说明: 输入:方阵大小n,输出:n*n的旋转方阵 举例: 当n=2时,输出: 1 2 4 3 当n=4时,输出: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 ...
- Bruce Eckel的资源
1 GitHub的技术博客 2 On Java 8 – Bruce Eckel 3 artima_weblogs - Bruce Eckel 4 back issues 5 eckel-oo-prog ...
- go语言实现无限极分类
// 应用分类二级菜单 AppCateNode struct { Id int64 `json:"id"` Name string `js ...
- 【基础】26个命令玩转linux,菜鸟及面试必备
1 查看目录与文件:ls #显示当前目录下所有文件的详细信息 ls -la 2 切换目录:cd #切换当前目录为/opt/test cd /opt/test 3 显示当前目录:pwd pwd 4 创建 ...
- hexo博客简易搭建教程
什么是Hexo Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页.官网 Hexo安装 安装 在安装Hex ...
- 一起学微软Power BI系列-使用技巧(6) 连接Sqlite数据库
好久没有研究Power BI了,看到高飞大神弄的东西,太惭愧了.今天有个小东西,数据在Sqlite里面,想倒腾到Power BI Desktop里面折腾一下,结果发现还不直接支持.所以只好硬着头皮上去 ...