SQL Server数据库--游标

游标介绍:

SQLSERVER对数据访问的一种机制,它允许用户对数据结果集进行逐条的访问。

访问的都是单条语句,避免锁表

优点:

游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。

 

概括来讲,SQL的游标是一种临时的数据库对象,即可以用来存放在数据库表中的数据行副本,也可以指向存储在数据库中的数据行的指针。游标提供了在逐行的基础上操作表中数据的方法。

 

游标的一个常见用途就是保存查询结果,以便以后使用。游标的结果集是由SELECT语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快的多

 

大部分程序数据设计语言都能使用游标来检索SQL数据库中的数据,在程序中嵌入游标和在程序中嵌入SQL语句相同。

 

缺点

因为我们做的数据量大,而且系统上跑的不只我们一个业务。所以,我们都要求尽量避免使用游标,游标使用时会对行加锁,可能会影响其他业务的正常进行。而且,数据量大时其效率也较低效。另外,内存也是其中一个限制。
因为游标其实是相当于把磁盘数据整体放入了内存中,如果游标数据量大则会造成内存不足,内存不足带来的影响大家都知道了。
所以,在数据量小时才使用游标。


 

游标常用的有三种

第一种:只进游标

第二种:静态游标static
第三种:动态游标dynamic


 

游标的执行过程

第一步、定义游标

第二步、打开    分为:全局 global 和 本地 local ,全局游标:多个存储过程,触发器

第三步、使用 

第四步、关闭

第五步、释放游标


 

 

第一种:只进游标

第一步:定义游标

declare product_cursor cursor --定义游标 智能指针
for 
select ProductNo,ProductName,Price from Product;

第二步:打开游标

global:全局  local:本地 (默认)

全局游标:多个存储过程,触发器

open product_cursor

第三步:使用游标

定义其它用于存放信息的变量
@varCursor用于存放单行数据 

declare @varCursor cursor,@pno int,@pname varchar(50),@price money
set @varCursor=product_cursor--赋值
--向下  next  向上:prior  第一个:first 最后一个 last
--这个例子讲的是“只进游标”所以只能用next
fetch next from @varCursor into @pno,@pname,@price--游标前进 into 赋值

while @@FETCH_STATUS=0 --判断是否执行成功
begin
    print cast(@pno as varchar)+','+@pname+','+cast(@price as varchar)
    fetch next from @varCursor into @pno,@pname,@price--游标前进 into 赋值
end

第四步:关闭游标

close product_cursor --关闭游标

 

第五步:释放游标

deallocate product_cursor --释放游标

 


 

 

第二种:静态游标static

第一步:定义游标

declare product_cursor cursor static --定义静态游标
for 
select ProductNo,ProductName,Price from Product;

第二步:打开游标

global:全局  local:本地 

全局游标:多个存储过程,触发器

open product_cursor 

第三步:使用游标
定义其它用于存放信息的变量
@varCursor用于存放单行数据

absolute:绝对定位 (从第几行读取)

relative:相对定位  (从当前行数,向下或向上第几行读取)

下面例子演示的是relative相对定位

declare @varCursor cursor,@pno int,@pname varchar(50),@price money
set @varCursor=product_cursor--赋值
--向下  next  向上:prior  第一个:first 最后一个 last
--absolute:绝对定位  相对定位:relative
fetch relative 2 from @varCursor into @pno,@pname,@price--游标前进 into 赋值
print cast(@pno as varchar)+','+@pname+','+cast(@price as varchar)



while @@FETCH_STATUS=0 --判断是否执行成功
begin
    print cast(@pno as varchar)+','+@pname+','+cast(@price as varchar)
    fetch next from @varCursor into @pno,@pname,@price--游标前进 into 赋值
end

第四步:关闭游标

close product_cursor

 

第五步:释放游标

deallocate product_cursor

 


 

 

第三种:动态游标dynamic

 

第一步:定义游标

declare product_cursor cursor dynamic --定义静态游标
for 
select ProductNo,ProductName,Price from Product;  --动态游标保存的是可变结果集

第二步:打开游标

global:全局 

local:本地 

全局游标:多个存储过程,触发器

open product_cursor

第三步:使用游标


定义其它用于存放信息的变量
@varCursor用于存放单行数据

declare @varCursor cursor,@pno int,@pname varchar(50),@price money
set @varCursor=product_cursor--赋值
--向下  next  向上:prior  第一个:first 最后一个 last  
--absolute:绝对定位  相对定位:relative
fetch next  from @varCursor into @pno,@pname,@price--游标前进 into 赋值
print cast(@pno as varchar)+','+@pname+','+cast(@price as varchar)



while @@FETCH_STATUS=0 --判断是否执行成功
begin
    print cast(@pno as varchar)+','+@pname+','+cast(@price as varchar)
    fetch next from @varCursor into @pno,@pname,@price--游标前进 into 赋值
end

第四步:关闭游标

close product_cursor

 

第五步:释放游标

deallocate product_cursor

 

转载于:https://www.cnblogs.com/cplvfx/articles/10509716.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值