5、游标操作:
--1、创建游标 --语法结构: /* declare 游标名称 [Insensitive] cursor [local|global] [forward_only|scroll] [static|keyset|dynamic|fast_forward] [read_only|scroll_locks|optimistic] [type_waring] for SQL语句 [For [read only|update]] */ --只读游标 declare testCursor cursor for select * from employee for read only;--该游标只读 --普通游标 declare testCursor2 cursor local scroll for select * from employee; --(sql server2005中不能添加local关键字,否则“游标可以创建成功open的时候会提示游标不存在”) --可更新游标 declare testCursor3 cursor local scroll for select * from employee for update; --2、打开游标 open testCursor2; --3、使用游标 --一条一条往后获取 fetch next from testCursor2; --一条一条往前获取(当前游标不能为只进游标) fetch prior from testCursor2; --报错:提取类型 prior 不能与只进游标一起使用。因为testCursor为只进游标 --获取第一条记录 fetch first from testCursor2; --获取最后一条记录 fetch last from testCursor2; --跳转到指定条数:获取游标的第二条记录,这个第二条以整个游标中的数据为起点 fetch absolute 1 from testCursor2; --使用变量进行跳转 declare @index int; set @index = 3; fetch absolute @index from testCursor2; --相对定位:以当前位置为起点,正数表示向前,负数表示向后 --目前游标的位置为4,relative 1表示向前一条也就是第5条,-1表示向后一条也就是第3条 fetch relative 5 from testCursor2; --从游标中获取值存入到变量中 declare @empId int; declare @empName varchar(50); declare @empAge smallint; declare @empPay money; declare @empJob varchar(50); declare @empAddress varchar(200); declare @telephone varchar(50); declare @empReward money; declare @total money; fetch absolute 1 from testCursor2 into @empId,@empName,@empAge,@empPay,@empJob,@empAddress,@telephone,@empReward,@total; print '编号:'+cast(@empId as varchar(30)); print '姓名:'+@empName; print '年龄:'+cast(@empAge as varchar(30)); print '工资:'+cast(@empPay as varchar(30)); print '职务:'+@empJob; print '住址:'+@empAddress; print '电话:'+@telephone; print '奖金:'+cast(@empReward as varchar(30)); print '总共收入:'+cast(@total as varchar(30)); --4、关闭游标:游标关闭之后还可以再打开 --语法结构:close 游标名称 close testCursor; --5、释放游标:游标释放之后不能再打开 --语法结构:deallocate 游标名称 deallocate testCursor
创建游标的语法结构参数说明:
[local|global]:游标的作用范围,分别表示局部(即游标所在的过程/触发器/批处理程序中使用)和全局(即除了可以在过程/触发器/批处理程序中使用之外整个会话层都可以使用),默认为local
[forward_only|scroll]:只进游标和上下调整游标,若定义成只进游标那么该游标只能从前往后获取数据不能从后往前或跳着读取数据,而scroll游标可以随意获取数据。默认为forward_only。Fetch Next是唯一支持的提取选项。如果在指定Forward_Only是不指定Static、KeySet、Dynamic关键字,默认为Dynamic游标。如果Forward_Only和Scroll没有指定,Static、KeySet、Dynamic游标默认为Scroll,Fast_Forward默认为Forward_Only
[static|keyset|dynamic|fast_forward]:Static:静态游标。KeySet:键集游标。Dynamic:动态游标,不支持Absolute提取选项。Fast_Forward:指定启用了性能优化的Forward_Only、Read_Only游标。如果指定啦Scroll或For_Update,就不能指定他啦。
[read_only|scroll_locks|optimistic]:Read_Only:不能通过游标对数据进行删改。Scroll_Locks:将行读入游标是,锁定这些行,确保删除或更新一定会成功。如果指定啦Fast_Forward或Static,就不能指定他啦。Optimistic:指定如果行自读入游标以来已得到更新,则通过游标进行的定位更新或定位删除不成功。当将行读入游标时,sqlserver不锁定行,它改用timestamp列值的比较结果来确定行读入游标后是否发生了修改,如果表不行timestamp列,它改用校验和值进行确定。如果已修改改行,则尝试进行的定位更新或删除将失败。如果指定啦Fast_Forward,则不能指定他。
[type_waring]:指定将游标从所请求的类型隐式转换为另一种类型时向客户端发送警告信息。
[For [read only|update]]:只读游标和更新游标,若不定义就是普通游标
游标的分类:
根据游标检测结果集变化的能力和消耗资源的情况不同,SQL Server支持的API服务器游标分为一下4种:
静态游标: 静态游标的结果集,在游标打开的时候建立在TempDB中,不论你在操作游标的时候,如何操作数据库,游标中的数据集都不会变。例如你在游标打开的时候,对游标查询的数据表数据进行增删改,操作之后,静态游标中select的数据依旧显示的为没有操作之前的数据。如果想与操作之后的数据一致,则重新关闭打开游标即可。
动态游标:这个则与静态游标相对,滚动游标时,动态游标反应结果集中的所有更改。结果集中的行数据值、顺序和成员在每次提取时都会变化。所有用户做的增删改语句通过游标均可见。如果使用API函数或T-SQL Where Current of子句通过游标进行更新,他们将立即可见。在游标外部所做的更新直到提交时才可见。
只进游标:只进游标不支持滚动,只支持从头到尾顺序提取数据,数据库执行增删改,在提取时是可见的,但由于该游标只能进不能向后滚动,所以在行提取后对行做增删改是不可见的。
键集驱动游标:打开键集驱动游标时,该有表中的各个成员身份和顺序是固定的。打开游标时,结果集这些行数据被一组唯一标识符标识,被标识的列做删改时,用户滚动游标是可见的,如果没被标识的列增该,则不可见,比如insert一条数据,是不可见的,若可见,须关闭重新打开游标。
静态游标在滚动时检测不到表数据变化,但消耗的资源相对很少。动态游标在滚动时能检测到所有表数据变化,但消耗的资源却较多。键集驱动游标则处于他们中间,所以根据需求建立适合自己的游标,避免资源浪费。
关于游标更详细的讲解可参考:http://www.cnblogs.com/knowledgesea/p/3699851.html
相关推荐
在数据库系统中,游标的创建和使用可以通过以下步骤来实现: 1. 声明游标:使用DECLARE语句来声明游标,例如,DECLARE cursor_name CURSOR FOR SELECT * FROM table_name; 2. 打开游标:使用OPEN语句来打开游标,...
本资源摘要信息涵盖了 SQL Server 中常用的语句大全,包括数据操作、数据定义、数据控制、事务控制、程序化 SQL 等方面的知识点。 一、数据操作 * SELECT 语句:从数据库表中检索数据行和列 * INSERT 语句:向...
SQL 语句和游标总结 SQL 语句和游标是数据库管理系统中两个非常重要的概念。游标提供了一种从表中检索数据并进行操作的灵活手段,主要用在服务器上,处理由客户端发送给服务器端的 SQL 语句,或是批处理、存储过程...
龙摆尾(坚行).sql.txt和游标实例.sql.txt很可能是包含具体游标使用示例的文件,可能涵盖了诸如迭代处理数据、基于条件更新数据等场景。实际应用中,游标常用于循环执行某个操作,例如批量更新满足特定条件的记录...
本文将深入探讨SQL语句游标的应用,特别是如何利用游标循环向表中添加数据,以及其背后的逻辑和技术要点。 ### 游标的定义与作用 游标允许SQL程序对查询结果中的每一行进行单独处理。与普通的SELECT语句不同,游标...
SQL Server 中创建和使用动态游标的技术要点 在 SQL Server 中,创建和使用动态游标是一种高效的数据处理方式。本文将详细介绍如何创建和使用动态游标,包括存储过程的设计、游标的创建、数据的插入和查询等方面的...
### SQL Server 游标实例详解 #### 一、游标概念与作用 在SQL Server中,游标是一种数据库对象,允许我们逐行处理查询结果集中...如果可能,尝试使用其他方法如表变量、临时表或者更高效的T-SQL语句来替代游标的使用。
1. **关联和定义**:将游标与Transact-SQL语句的结果集关联,定义游标的属性,如是否可更新。 2. **填充**:执行Transact-SQL语句以填充游标。 3. **检索和操作**:提取游标中的行并根据需要进行滚动、更新或删除...
- 打开、关闭和迭代:使用OPEN、FETCH和CLOSE语句操作游标,通过循环读取查询结果。 - 使用游标变量:将游标结果赋值给变量,进行进一步的处理或计算。 4. 动态SQL: - 动态SQL的原理:在运行时构建和执行SQL...
6. 关闭和释放游标:完成游标操作后,应使用CLOSE语句关闭游标,最后使用DEALLOCATE语句释放游标资源。 二、SQL游标使用方法 1. 在SQL Server中,游标的使用通常包括以下几个步骤: - DECLARE声明游标,定义游标...
### MySQL中SQL语句游标详解 #### 一、引言 在数据库开发过程中,当开发者需要逐条处理从查询结果集中获取的数据时,游标成为了一种非常实用且强大的工具。本文旨在深入探讨MySQL中游标的概念及其使用方法,帮助...
### SQL游标原理和使用方法 #### 一、引言 在数据库开发中,当我们需要检索数据时,通常会使用`SELECT`语句。但在某些情况下,我们需要从查询结果集中逐条读取记录,这时就需要用到游标。本文将详细介绍SQL游标的...
5. **关闭和释放游标**:处理完所有数据后,记得关闭游标并释放资源: ```sql CLOSE @MyCursor; DEALLOCATE @MyCursor; ``` 结合标签“源码”和“工具”,我们可以理解可能包含的示例代码或工具使用,但具体的内容...
创建和使用游标的步骤包括: 1. 定义游标:使用`DECLARE`语句声明一个游标变量,并指定其查询语句。 2. 打开游标:使用`OPEN`语句将游标与查询结果关联起来。 3. 获取数据:通过`FETCH NEXT`从游标中获取下一行数据...
### SQL Server 游标的使用与事务管理 #### 一、游标的使用方法 在 SQL Server 中,游标是一种用于处理结果集中的数据行的一种机制。它允许开发人员逐行访问查询的结果,这对于需要对每一条记录进行特定操作的场景...
一个对表进行操作的T-SQL语句通常都可产生或处理一组记录,但是许多应用程序,尤其是T-SQL嵌入的主语言,通常不能把整个结果集作为一个单元来处理,这些应用程序就需要用一种机制来保证每次处理结果集中的一行或几行...
SQL 语句是数据库管理系统中使用的语言,用于操作和管理数据库。SQL 语句大全ครอบ盖了数据库操作的各个方面,包括数据操作、数据概念、数据操纵、事务操纵、程序化 SQL 等。 数据操作 * SELECT 语句:从数据库...
在SQL Server中,游标是一种重要的工具,它允许我们逐行处理查询结果集,而不仅仅是一次性获取所有数据。游标提供了在结果集中向前或...然而,为了优化性能,应当在必要时才使用游标,并确保在使用后正确地关闭和释放。
创建和使用游标的步骤包括: 1. **声明游标**:定义游标的名称、数据源(查询)和游标类型(是否可滚动、是否只读等)。 2. **打开游标**:通过`OPEN`语句启动游标并准备读取数据。 3. **提取数据**:使用`FETCH ...