sql 游标
目录
前言:
游标简介:
游标的管理:
1.声明游标
2.打开游标
3.读取游标
4.关闭游标
5.释放游标
举个综合的例子:
前言:
select语句查询的结果为一个元祖集合(相当于一张表),而我们的高级语言程序每次只能处理一个元祖(相当于表中的一行),为了协调二者,需要用到元祖。
游标简介:
游标是一个能从多个元祖的集合中每次读取一个元祖的机制。可以把游标想象成一个指针,每次只对表中的一行进行操作。
sqlServer支持三种类型的游标:T-SQL游标、API服务器游标、客户游标。
T-SQL游标:主要用存储过程、触发器和T-SQL脚本中。
客户游标:主要是在客户机缓存结果集时使用。仅支持静态游标,不支持动态游标。
游标的管理:
主要有五个操作:声明游标、打开游标、读取游标、关闭游标、释放游标。
1.声明游标
格式如下:
declare 游标名 [insensitive][scroll] cursor
for <select 语句>
[for read only | update [of <列名>[,....n]]
insensitive:加上了这个,即:游标不会随着基本表的内容的改变而改变。同样,基本表也不会随着游标的改变而改变。其原理:游标的读取操作都在一个临时表中,而不是基本表。
scroll:scroll表示可随意移动游标指针(不加只能向前)
参数说明:
- Frist:结果集的第一行
- Prior:当前位置的上一行
- Next:当前位置的下一行
- Last:最后一行
- Absoute n:从游标的第一行开始数,第n行。
- Relative n:从当前位置数,第n行。
- Into @variable_name[,...] : 将提取到的数据存放到变量variable_name中(但记得类型要相同)
2.打开游标
--打开游标
open my_cursor
3.读取游标
举个例子:
--提取最后一行学校信息
fetch last from cursor_school into @num, @schoolname
print '学校编号:' + cast(@num as varchar) + '学校名称:' + @schoolname
fetch语句中,SQL Server提供了6种定位选项:
next
返回结果集当前行的下一行,首次提取返回第一行。
frior
返回结果集的上一行,首次提取无数据返回。
first
返回结果集第一行。
last
返回结果集最后一行。
移动到结果集的第n行。如果n为正数,从结果集的第一行(包含第一行)起移到第n行;如果n为负数,则从结果集的最后一行起移到第n行。
relative
从游标指针的当前位置移动n行。如果n为正数,则读取游标当前位置起向后的第n行数据;如果n为负数,则读取游标当前位置起向前的第n行数据。
4.关闭游标
close 游标名
5.释放游标
deallocate 游标名
举个综合的例子:
use JXGL
go
declare S_male scroll cursor
for
select *
from s
where sex='男'
open S_male
fetch absolute 3 from s_male
update S
set Sname='nice'
where CURRENT of s_male
go
声明一个游标,从S表中找出第三个男生,修改他的名字为nice
结果:
相关阅读
利用SqlServer触发器自动更新表updatetime字段值
本文主要记录了使用SqlServer数据库触发器自动更新表的"更新时间updatetime"字段 在 MySQL数据库中,某行数据创建时间字段 createt
sqlserver 中isnull(Null,0) 和isnull(' ',0) 区别
SELECT ISNULL(NULL,0) WHERE ISNULL(NULL,0)=0 SELECT ISNULL(' ',0) WHERE ISNULL(' ',0)=0 SELECT ISNULL(NULL,0) WHERE ISN
创建存储过程注意事项 在 SQL Server、 Azure SQL Database、Azure SQL 数据仓库和并行数据库中创建 Transact-SQL 或公共语
--声明一个游标 DECLARE MyCursor CURSOR FOR SELECT TOP 5 FBookName,FBookCoding FROM TBookInfo//定义一个叫MyCursor的游标
DML AFTER DELETE触发器创建原理 触发器触发时,系统自动在内存中创建deleted表或inserted表,inserted表临时保存了插入或更新后的