MsSql

关注公众号 jb51net

关闭
首页 > 数据库 > MsSql > SQLServer游标基本操作

SQL Server数据库游标的基本操作指南

作者:菇毒

这篇文章主要给大家介绍了关于SQL Server数据库游标的基本操作指南,SQL Server游标是一种用于遍历查询结果集的数据库对象,它可以逐行处理查询结果,并执行相关的操作,需要的朋友可以参考下

1. 声明游标

游标主要由结果集合游标位置组成的,结果集是 SELECT 语句执行后返回的,而游标位置是指向返回结果集中的指针;
使用游标前必须对游标进行声明;

在 SQL Server 数据库中,使用 DECLARE CURSOR 语句对游标进行声明;

游标的声明要对游标的滚动行为、游标所操作的结果集进行设置;

游标的声明语法格式如下:

DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]
    [ FORWARD_ONLY | SCROLL ]
    [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
    [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
    [ TYPE_WARNING ]
    FRO select_seatement
    [ FRO UPDATE [ OF column_name [,..n] ] ]

注意:GROBAL 和 LOCAL 参数都未指定,默认值就由 default to local cursor 数据选项的设置控制;

例子1:声明名称为 cursor_B 的标准游标,如下所示:

declare cursor_B cursorfor select * from B

20220404

上述定义了一个名为 cursor_B 的游标,游标所操作的结果集从 SELECT 语句中得到;

例子2:声明名称为 cursor_B_read de 的只读游标,如下所示:

declare cursor_B_read cursor
for select * from B
for read only

20220404

上述代码中与标准的定义游标过程相比多出了 FOR READ ONLY 语句,表名该游标的记录只能被读取,不能进行被读取,不能进行更改;

例子3:声明名称称为 curesor_B_update 的更改标签,如下所示:

declare cursor_B_update cursor
for select * from B
for update

20220404

2. 打开游标

使用 OPEN 语句打开 Transa-SQL 服务器游标,执行 OPEN 语句的过程,按照 SELECT 语句填充数据,当打开游标时,游标的位置在数据集的第一行,打开游标的语法格式如下:

OPEN [GLOBAL] cursor_name | cursor_variable _name

例子1:打开游标 cursor_B,如下所示:

open cursor_B

打开游标后,可进行数据操作;
打开全局游标:

open global cursor_B

打开游标是对数据库进行一些 SQL SELECT 的操作,将耗费一段时间,取决于使用的系统性能和这条语句的复杂性;

3. 读取游标中的数据

打开游标后就能读取数据集中的记录,用 FETCH 语句能对数据集总的数据进行某一行读取;

FETCH 语法的格式如下:

FETCH
[ [ NEXT | PRIOR | FIRST | LAST 
| ABSOLUTE {n | @nvar}
| relative {n | @nvar}
]
FROM
]
{{ [ GLOBAL ] cursor_name } | @cursor_variable_name }
{ INTO @variable_name [,...n] }

例子 1:利用之前创建的游标 cursor_B_read 检索 B表中的记录

declare cursor_B_read cursor
for select * from B
open cursor_B_read
fetch next from cursor_B_read
while @@FETCH_STATUS = 0
begin
fetch next from cursor_B_read
end

20220404

在使用游标对数据进行读取时可声明一个游标变量,使用关键字 SET 对游标进行赋值;

对游标赋值的操作步骤:先创建一个游标,打开后将值赋予变量,最后通过 FETCH 语句从变量中读取值;

例子 2:创建 cursor_S 游标,并将值赋予 @Mchr 游标变量

declare @Mchr cursor
declare cursor_S cursor for
select * from s;

open cursor_S
set @Mchr = cursor_S
fetch next from @Mchr
while @@FETCH_STATUS = 0
begin
fetch next from @Mchr
end

close @Mchr
deallocate @Mchr

20220404

先声明了游标变量 @Mchr,再创建一个 cursor_S 游标打开游标后将值赋给 @Mchr,最后用 FEECH 读取变量中的数据内容;

FETCH 语法是游标使用的核心,使用游标能逐条记录到查询结果;已经声明并打开一个游标后,就能将数据放入任意的变量中;

在 FETCH 语句中,读者能指定游标的名称和目标的变量名称;

注意: 若在 SELECT 语句中使用了 DISTINCT、UNION、GROUP BY 语句,且在选择中包含了聚合表达式,游标就自动为 INSENSITIVE 的游标;

4. 关闭游标

SQL Server 数据库在创建一个游标后,数据库服务器会开辟一片存储空间用于存放游标返回的数据集;在游标使用完后一定要养成关闭游标的习惯,这样就能释放服务器为游标开辟的内存空间;

在处理完游标中的数据之后,用 CLOSE 命令能关闭一个已打开的游标;

语法格式如下:

CLOSE [ CLOBAL ] cursor_name | cursor_variable_naem

例子1:关闭名称为 cursor_B 的游标

close cursor_B

游标可应用在存储过程、触发器等中,若在声明游标上与释放游标之间使用了事务结构,在结束事务时游标就会自动关闭;

具体步骤如下:

注意: 打开游标后,SQL Server 服务器会专门为游标开辟一定的内存空间用于存放游标操作的数据结果集,同时游标的使用也会根据具体情况对某些数据进行封锁;

所以在不使用游标时一定要关闭游标,以通知服务器释放游标所占用的资源;

关闭游标后,可再次打开游标,在一个批处理中,也能多次打开和关闭游标;

5. 释放游标

当用户确定某个游标不再使用时,应当即使使用 DEALLOCATE 命令释放游标,SQL Server 将删除这个游标的数据结构;

语法如下所示:

DEALLOCATE [GLOBAL]

游标被释放后据不能再使用 OPEN 命令再次打开了;

关闭游标释放游标的区别在于,关闭没有把游标运行所占用的内存空间释放,若再次打开游标,还能照常使用,若是释放,就是将游标占用的资源释放;若再想使用游标,就必须重新建立;

总结

到此这篇关于SQL Server数据库游标的基本操作指南的文章就介绍到这了,更多相关SQLServer游标基本操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文