游标的使用
来源:互联网 发布:三国群英传3 mac版 编辑:程序博客网 时间:2024/06/07 05:06
1、概念
游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录
2、声明:
DECLARE <游标名> [insensitive] [scroll] CURSOR FOR<SELECT语句>
[FOR { READ ONLY | UPDATE | [ OF column_name [,....n] ] } ]
insensitive:该选项将游标数据的一个拷贝放入tempdb中,这样游标就看不到数据的变化,该选型有时也称为快照(snapshot)或静态游标(static cursor)。不允许直接跟新包含在该游标中的内容。MS SQL SERVER 会将游标定义所选取出来的数据记录存放在一临时表内(建立在tempdb 数据库下)。对该游标的读取操作皆由临时表来应答。因此,对基本表的修改并不影响游标提取的数据,即游标不会随着基本表内容的改变而改变,同时也无法通过游标来更新基本表。如果不使用该保留字,那么对基本表的更新、删除都会反映到游标中。
另外应该指出,当遇到以下情况发生时,游标将自动设定INSENSITIVE 选项。
a.在SELECT 语句中使用DISTINCT、 GROUP BY、 HAVING UNION 语句;
b.使用OUTER JOIN;
c.所选取的任意表没有索引;
d.将实数值当作选取的列。
scroll:
表明所有的提取操作(如FIRST、 LAST、 PRIOR、 NEXT、 RELATIVE、 ABSOLUTE)都可用。如果不使用该保留字,那么只能进行NEXT 提取操作。由此可见,SCROLL 极大地增加了提取数据的灵活性,可以随意读取结果集中的任一行数据记录,而不必关闭再重开游标。
FOR READ ONLY
指出游标是只读的。在默认情况下,包含在游标中的数据是可以更新的
FOR UPDATE
指游标是可以更新的
3、打开游标
OPEN 游标名
4、读取游标
FETCH [ next | prior |first | last ] FROM { 游标名 | @游标变量名 } [ INTO @变量名 [,…] ]
5、关闭游标
CLOSE mycursor
6、删除游标
DEALLOCATE mycursor
7、应用
if exists (select * from sysobjects where id=object_id(N'cursor_test_serch_tb_students') and OBJECTPROPERTY(id,N'isProcedure')=1)drop procedure cursor_test_serch_tb_studentsGO/*创建存储过程cursor_test_serch_tb_students,定义一个游标,从表students中按顺序读取数据*/create procedure cursor_test_serch_tb_students asdeclare @id int,@name varchar(20)declare student_to_cursor cursor for select st_id,st_name from studentsopen student_to_cursorfetch next from student_to_cursor into @id,@name/*判断游标的状态0 fetch语句成功 -1 fetch语句失败或此行不在结果集中 -2被提取的行不存在*/while(@@FETCH_STATUS=0)BEGINPRINT convert(varchar(5),@id)+':'+@namefetch next from student_to_cursor into @id,@nameENDclose student_to_cursordeallocate student_to_cursor执行:
exec cursor_test_serch_tb_students
结果:
1:ZhangSan
2:Tom
3:Jack
4:Mis Daivid
5:Li Moss
6:Wang Liang
7:Zhang Qian
8:Qu HuaiYuan
- 关于游标的使用
- 游标的使用
- 游标的使用
- 游标的使用
- 游标的使用
- 游标的使用
- 游标的使用
- 游标的使用问题
- 游标的使用
- sqlserver游标的使用
- sql游标的使用
- 使用游标的触发器
- sql2000-游标的使用
- SQL游标的使用
- [MSSQL]游标的使用
- 游标的使用
- mysql 游标的使用
- mysql 游标的使用
- 如何学好C语言
- Javascript 字符串转日期
- HttpsURLConnection和DefaultHttpClient连接HTTPS不用证书
- 64位下PL/SQL连接Oracle
- JSTL国际化
- 游标的使用
- vc中常见字符类型的讨论
- java内存泄漏原因分析及解决方法
- 『只读经典』机器学习与人工智能书籍资源导引
- 面向对象之继承和组合浅谈
- 18、从头学Android之BroadcastReceiver
- 高级C教程
- jquery插件
- 字符串题目A