内容正文:
SQL Server 2019高级应用
第9章
目录
01
T-SQL编程基础
02
游标
03
存储过程
04
触发器
本章主要内容
本章主要阐述T-SQL的标识符、运算符、表达式、函数、变量与常量、流程控制语句等基础知识,并结合实例探讨T-SQL最常见的应用,分析游标的基本原理和使用方法,重点介绍使用T-SQL创建、管理存储过程和触发器。
游 标
第9章
02
9.2 游标
关系数据库管理系统的实质是面向集合的,SELECT查询之后返回的是结果集,即系列行数据的集合,在SQL Server中并没有一种描述表中单一记录的表达形式,除非使用WHERE子句限制只有一条记录被选中。用户在利用T-SQL设计程序时,可能会根据每条记录值的不同分别采取不同的处理策略,也就是说需要逐行对结果集进行处理。因此,必须借助游标进行面向单条记录的数据处理。
9.2.1 游标的概念
游标是T-SQL支持的一种对象,是处理结果集的一种机制。游标本质是系统开辟的一块内存区域,用来临时保存SELECT等SQL语句执行后返回的结果集。
游标允许应用程序对查询语句SELECT返回的结果集中的每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作。它还能够基于游标位置而对表中数据进行删除或更新。此外,正是游标把面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两种数据处理方式能够进行沟通。
9.2.2 游标的语法格式
T-SQL游标由DECLARE CURSOR语法定义,主要用在T-SQL脚本、存储过程和触发器中。每个游标必须有四个组成部分,这四个关键部分必须符合以下顺序:首先是DECLARE游标(声明),其次是OPEN游标(打开),再次是从一个游标中FETCH信息(推进),最后是CLOSE、DELLOCATE游标(关闭及释放)。
9.2.2 游标的语法格式
1.声明游标
使用DECLARE声明一个游标,主要包括以下内容:游标名称、数据来源(表和列)、选取条件、属性(仅读或可修改)。其具体语法格式如下所示:
DECLARE cursor_name CURSOR
FOR select_statement
[ FOR READ ONLY|UPDATE [ OF column_name [,...n ] ] ]
9.2.2 游标的语法格式
2. 打开游标
打开游标的语法格式相对简单:
OPEN cursor_name
3.推进游标
推进游标的语法格式如下:
FETCH [NEXT|PRIOR|FIRST|LAST|]
FROM cursor_name
[into @variable_name[,...]]
9.2.2 游标的语法格式
4.关闭、释放游标
关闭、释放游标的语法格式相对简单,如下所示:
CLOSE cursor_name
上述语句关闭游标并释放资源,如有需要可使用OPEN重启游标。
DELLOCATE cursor_name
游标使用示例
USE TeachSystem
GO
--定义局部变量
DECLARE @Cno nvarchar(6),@Cname nvarchar(20)
--定义游标
DECLARE CrsCourse CURSOR
FOR SELECT CNO,CN FROM course ORDER BY CNO
--打开游标
OPEN CrsCourse
游标使用示例
--打开首行数据
FETCH NEXT FROM CrsCourse into @Cno,@Cname
--循环推进
WHILE @@FETCH_STATUS=0 --通过游标状态构造循环,逐行输出
BEGIN
PRINT '课程号:'+@Cno+'课程名称:'+@Cname
FETCH NEXT FROM CrsCourse INTO @Cno,@Cname --取下一行数据
END
CLOSE CrsCourse --关闭游标
DELLOCATE CrsCourse --释放游标
9.2.3 游标的局限
游标的优点是可以方便地从一个结果集中循环遍历数据再进行操作。但是,正因为游标可将结果集中的数据逐条取出进行处理,从而增加了服务器的负担。再者,使用游标的效率远远没有使用默认的结果集的效率高。在默认的结果集中,从客户端发送到服务器的唯一一个数据包是包含需执行语句的数据包。而在使用服务器的游标时,每个FETCH语句都必须从客户