游标小例

摘要:
一,游标的作用:当在存储过程,函数,批处理,触发器中使用select返回多条记录时,游标提供了一个可以对记录进行逐条处理的方法.二,游标的使用方法:1,使用DeclareCursor语句,根据Select语句创建游标.有两种操作方法,效果是一样的,请注意他们的区别:第一种:声明变量,然后设置游标Declare@MyVariableCursor--声明@MyVariable这个变量Set@MyVar
一,游标的 作用:
当在存储过程,函数,批处理,触发器中 使用 select 返回多条记录时,游标提供了一个可以对记录进行逐条处理的 方法.
二,游标的使用方法:
1,使用Declare Cursor语句,根据Select语句创建游标.
有两种操作方法,效果是一样的,请注意他们的区别 :
第一种:声明变量,然后设置游标
Declare @MyVariable Cursor --声明@MyVariable 这个变量
Set @MyVariable =Cursor For --根据select创建游标的固定用法
SELECT id,name FROM usertable
第二种:声明变量,声明游标,设置变更为游标
DECLARE @MyVariable CURSOR --声明@MyVariable 这个变量
DECLARE MyCursor CURSOR FOR --注意这里的MyCursor前没有@符号,声明了一个游标
SELECT id,name FROM usertable
SET @MyVariable = MyCursor --在这里才把游标赋值给变量@MyVariable
2,使用Open语句填充该游标
Open @MyVariable --使用之前必须先打开它
--open语句会执行Declare Cursor语句中指定的Select语句,并填充游标
3,使用Fetch语句更改游标所指向的记录,并将值存储在局部变量中:
Fetch Next From @MyVariable
Into @intID,@chvName
说明: 此语句的语法是 Fetch 操作符 From 游标变量名 Into 变量名
a)操作符可以是: Next(下一条),Prior(前一条),First(第一条),Last(最后一条),
也可以指定绝对位置和相对位置
b)游标变量名就是之前创建并填充的@MyVariable
c)变量名:需要在使用之前声明,本例 用到的@intID,@chvName
在Declare @MyVariable Cursor之前声明Declare @intID int,@chvName varchar(50)
d)游标刚好打开时 Fetch Next语句读取第一条记录
4,对检索出来的信息进行处理
While (@@FETCH_STATUS=0)
Begin
if @chvName='不必完美'
begin
update usetable set name='管理员' where id=@intID
end
Fetch Next From @MyVariable --移动到下一条,你可以反复使用这个语句
Into @intID,@chvName
End
说明:@@FETCH_STATUS是一个全局变量,
它返回在当前连接期间执行的最后一条Fetch语句的执行状态.
它经常循环中 用于退出循环的条件.
@@FETCH_STATUS的值和其含义:
0(数字零),提取完全成功;
-1, 最后一条已经读完或读取失败
-2,记录丢失(例如,其他人删除了该记录)
还有一个可能会用到的全局变量@@cursor_rows 游标中的记录数
5,使用Close语句关闭该游标,释放大部分的资源(释放记录集以及锁)
Close @MyVariable
说明:此语句执行对象必须是一个已经打开的游标,否则将报错.
6,使用Deallocate语句清楚该游标.
Deallocate @MyVariable
说明:Close语句执行之后,游标结构仍然存在,你还可以再次打开它,如果彻底不用了.你应该用Dealocate语句删除该结构.
完成后的实例为:
Declare @intID int,@chvName varchar(50)
Declare @MyVariable Cursor --声明@MyVariable 这个变量
Set @MyVariable =Cursor For --根据select创建游标的固定用法
SELECT id,name FROM usertable
Open @MyVariable --使用之前必须先打开它
Fetch Next From @MyVariable
Into @intID,@chvName
While (@@FETCH_STATUS=0)
Begin
if @chvName='不必完美'
begin
update usetable set name='管理员' where id=@intID
end
Fetch Next From @MyVariable --移动到下一条,你可以反复使用这个语句
Into @intID,@chvName
End
Close @MyVariable
Deallocate @MyVariable

免责声明:文章转载自《游标小例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL SERVER导出模型图【虚拟化】 vSphere 6.0下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SqlServer查看锁表与解锁

锁定数据库的一个表 SELECT * FROM table WITH (HOLDLOCK)  注意: 锁定数据库的一个表的区别 SELECT * FROM table WITH (HOLDLOCK)  其他事务可以读取表,但不能更新删除 SELECT * FROM table WITH (TABLOCKX)  其他事务不能读取表,更新和删除 SELECT...

oracle nologging用法

一、oracle日志模式分为(logging,force logging,nologging) 默认情况是logging,就是会记录到redo日志中,force logging是强制记录日志,nologging是尽量减少日志。FORCE LOGGING可以在数据库级别、表空间级别进行设定、而LOGGING与NOLOGGING可以在表级别设定。 注:FORC...

Oracle子查询相关内容(包含TOP-N查询和分页查询)

本节介绍Oracle子查询的相关内容: 实例用到的数据为oracle中scott用户下的emp员工表,dept部门表,数据如下: 一、子查询 1、概念:嵌入在一个查询中的另一个查询语句,也就是说一个查询作为另一个查询的条件,这个查询称为子查询。 那么可以使用子查询的位置有select后面、from后面、where后面以及having后面。 2、分类:(1...

SQL 语句实现查询子父节点

1. 查询所有父节点 SELECT T2.* FROM ( SELECT @R AS _id, ( SELECT @R := PARENT_ID FROM sys_org WHERE ID = _id ) AS PARENT_ID, @L := @L + 1 AS LVL FROM...

bootstrap-select 多选下拉框使用教程

http://silviomoreto.github.io/bootstrap-select/ 一、使用bootstrap-select组件时,先引用下列文件 最后一个文件defaults-zh_CN.min.js非必需,是组件中文化的时候才需要引用。 <!--Latest compiled and minified CSS --> <...

oracle事务和锁

数据库事务概括 1. 说明   一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退。 2.事务相关概念   1)事务的提交和回滚:COMMIT/ROLLBACK   2)事务的开始和结束     开始事务:连接到数据库,执行DML、DCL、DDL语句     结束事务: 1. 执行DDL(例如CREATE TABLE),DCL(例如GRANT),系统...