Sqlserver 游标

   说到游标,其实在实际开发中并不常用,他的特点就是行处理,当我们也好对每一行数据进行数据处理的时候,会用到游标,还有遇到一些对单行复杂的逻辑操作,或者用到临时表时用游标最好。

   游标的定义方式分五步:1,声明游标  2,打开游标    3,处理数据   4,关闭游标   5, 释放游标(删除游标)

首先建一张表

create table Student(
[Id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](50) NULL,
[age] [varchar][50] NULL

声明游标:

declare StudentCur cursor --声明时未指定"local"或"global"关键字,系统默认游标是"global(全局)"的.
for
select name,age from Student
GO
打开游标:
Open StudentCur
while @@status=0
处理数据:
fetch next from StudentCur
begin
fetch next from studentCur --读取当前行的下一行,并使其置为当前行(刚开始时游标置于表头的前一行,即若表是从0开始的,游标最初置于-1处,所以第一次读取的是头一行)
fetch prior from studentCur --读取当前行的前一行,并使其置为当前行
fetch first from studentCur --读取游标的第一行,并使其置为当前行(不能用于只进游标)
fetch last from studentCur --读取游标的最后一行,并使其置为当前行(不能用于只进游标)
fetch absolute 2 from studentCur --读取从游标头开始向后的第2行,并将读取的行作为新的行
fetch relative 3 from studentCur --读取从当前行开始向后的第3行,并将读取的行作为新的行
fetch relative-2 from studentCur --读取当前行的上两行,并将读取的行作为新的行
--读取数据结束

end
关闭游标:
close StudentCur
释放游标:
deallocate StudentCur

游标实例:

先向为了有演示游标用法,向Student表中添加学生信息。

insert into Student(name,age)values('张三‘,20) 

insert into Student(name,age)values('李四‘,21) 

实现功能:将表中成员的年龄有减1岁

USE [JiZhan]
GO
/****** Object:  StoredProcedure [dbo].[GetSysDateTime]    Script Date: 2019/11/20 星期三 13:39:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
create PROCEDURE [dbo].[Demo]   
AS
declare @Reage int
declare @Id int
declare StudentCur cursor
for 
select Id, age from Student
GO
Open StudentCur
while @@status=0
fetch next from StudentCur into @Id,@age
update Student set age=@age+1 where Id=@id
begin
fetch next from studentCur into @age,@age --读取当前行的下一行,并使其置为当前行(刚开始时游标置于表头的前一行,即若表是从0开始的,游标最初置于-1处,所以第一次读取的是头一行)
update Student set age=@age+1 where Id=@id
end
close StudentCur
deallocate StudentCur

以上我只是做一个简单的实例,其实游标好好多属性,设置应用与不同场景。这就要具体情况具体对待了。

 但是我个人建议,能不用游标就不要用游标,太好资源和内存了。

  

   

原文地址:https://www.cnblogs.com/zpy1993-09/p/11898531.html