删除游标
声明游标:
可以使用DECLARE CURSOR语句来声明Transact-SQL服务器游标和定义游标的特性,例如游标的滚动行为和结果集的查询方式等。DECLARE
CURSOR的语法结构如下:
DECLAREcursor_name CURSOR
[LOCAL | GLOBAL ]
[FORWARD_ONLY | SCROLL ]
[STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[TYPE_WARNING ]
FORselect_statement
[FOR UPDATE [ OF column_name[ ,...n] ]]
例:
下面是定义游标的一个简单示例:
USE HrSystem
GO
DECLARE Employee_Cursor CURSOR
FOR SELECT * FROM Employees WHERE Sex = '男'
GO
游标结果集是表Employees中所有的男性员工。
打开游标:
OPEN语句的语法结构如下:
OPEN{ { [ GLOBAL ] cursor_name } |cursor_variable_name
}
参数说明如下:
cursor_name已声明的游标的名称。如果指定了GLOBAL,cursor_name指的是全局游标,否则cursor_name指的是局部游标。
cursor_variable_name指定游标变量的名称。
例:
下面是打开游标的一个简单示例:
USE HrSystem
GO
DECLARE Employee_Cursor CURSOR
FOR SELECT * FROM Employees WHERE Sex = '男'
OPENE mployee_Cursor
GO
读取游标中的数据:
读取数据有三种方式:
1.FETCH语句
2.@@FETCH_STATUS函数
3.@@CURSOR_ROWS函数
FETCH:
FETCH语句的功能是从Transact-SQL服务器游标中检索特定的一行。它的语法结构如下:
FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
]
{{ [ GLOBAL ] 游标名称} | @游标变量名称}
[INTO @variable_name [ ,...n ] ]
例:
下面是读取游标数据的一个简单示例:
USE HrSystem
GO
DECLARE Employee_Cursor CURSOR
FOR SELECT * FROM Employees WHERE Sex = '男'
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
GO
例:
以下是使用FETCH LAST读取最后一行数据的示例:
USEHrSystem
GO
DECLARE Employee_Scroll_Cursor SCROLL CURSOR
FOR SELECT * FROM Employees WHERE Sex = '男'
OPENE mployee_Scroll_Cursor
FETCH LAST FROM Employee_Scroll_Cursor
GO
@@FETCH_STATUS函数
可以使用@@FETCH_STATUS函数获取FETCH语句的状态。返回值等于0表示FETCH语句执行成功;返回值等于-1表示FETCH语句执行失败;返回值等于-2表示提取的行不存在。
例:
执行下面的语句可以使用游标获取表Employees中所有男性员工数据。
USE HrSystem
GO
DECLARE Employee_Scroll_Cursor SCROLL CURSOR
FOR SELECT * FROM Employees WHERE Sex = '男'
OPEN Employee_Scroll_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH FROM Employee_Scroll_Cursor
END
GO
@@CURSOR_ROWS函数
返 回 值
|
说 明
|
−m
|
游标被异步填充。返回值是键集中当前的行数
|
−1
|
游标为动态。因为动态游标可反映所有更改,所以符合游标的行数不断变化。因而永远不能确定地说所有符合条件的行均已检索到
|
0
|
没有被打开的游标,没有符合最后打开的游标的行,或最后打开的游标已被关闭或被释放
|
n
|
游标已完全填充。返回值是在游标中的总行数
|
例:
验证@@CURSOR_ROWS函数的使用方法。
具体语句如下:
USE HrSystem
DECLARE 男员工SCROLL CURSOR
FOR SELECT * FROM Employees WHERESex='男'
-- 没有打开游标时,@@CURSOR_ROWS返回值为0
IF @@CURSOR_ROWS = 0
PRINT '没有打开的游标'
OPEN男员工
-- 打开游标后,@@CURSOR_ROWSR返回值是当前游标中的总行数
IF @@CURSOR_ROWS > 0
PRINT @@CURSOR_ROWS
GO
执行结果为:
没有打开的游标
6
关闭游标:
CLOSE语句的功能是关闭一个打开的游标。关闭游标将完成以下工作:
释放当前结果集。
解除定位于游标行上的游标锁定。
不允许在关闭的游标上提取、定位和更新数据,直到游标重新打开为止。CLOSE语句的语法结构如下:
CLOSE{ { [ GLOBAL ] cursor_name } |cursor_variable_name
}
例:
关闭游标后不能创建同名游标的示例:
USE HrSystem
GO
DECLARE Employee_Cursor2 CURSOR
FOR SELECT * FROM Employees WHERE Sex = '男'
OPEN Employee_Cursor2
CLOSE Employee_Cursor2
GO
DECLARE Employee_Cursor2 CURSOR
FOR SELECT Emp_Name, Title FROM Employees WHERE Sex='男'
GO
运行结果为:
消息16915,级别16,状态1,第2行
名为'Employee_Cursor2'的游标已存在。
获取游标的状态和属性:
使用CURSOR_STATUS函数可以获取指定游标的状态,其基本语法如下:
CURSOR_STATUS(<游标类型>, <游标名称或游标变量>)
CUdsfsc RSOR_STATUS函数的返回值:
返回值
|
说明
|
1
|
游标的结果集中至少存在一行数据
|
0
|
游标的结果集为空
|
-1
|
游标被关闭
|
-2
|
游标不适用
|
-3
|
指定名称的游标不存在
|
例:
使用下面的脚本可以检测声明游标前、打开游标后和关闭游标后游标的状态。
USEHrSystem;
GO
SELECT CURSOR_STATUS('global', 'Cursor1') AS '声明前状态'
DECLARE Cursor1 CURSOR FOR
SELECT Emp_id FROM Employees ;
OPEN Cursor1;
SELECT CURSOR_STATUS('global', 'Cursor1') AS '打开状态'
CLOSE Cursor1;
DEAL LOCATECursor1;
SELECT CURSOR_STATUS('global', 'Cursor1') AS '关闭后状态'
GO
修改游标结果集中的行:
UPDATE语句可以修改表中数据,也可以和游标相结合,修改当前游标指定的数据,基本语法如下:
UPDATE<表名> SET
WHERECURRENT OF <游标名>
例:
下面的脚本中可以使用游标来修改表Employees中的姓名为张三的员工记录,将其职务修改为总经理。
USEHrSystem;
GO
DECLARE MyEmpCursor CURSOR FOR
SELECT Emp_id FROM Employees
WHERE Emp_name = '张三';
OPEN MyEmpCursor;
FETCH FROM MyEmpCursor;
UPDATE Employees SET Title = '总经理'
WHERE CURRENT OF MyEmpCursor;
CLOSE MyEmpCursor;
DEAL LOCATE MyEmpCursor;
GO
删除游标结果集中的行:
使用DELETE语句可以删除表中数据,也可以和游标相结合,删除当前游标指定的数据,基本语法如下:
DELETEFROM <表名>
WHERECURRENT OF <游标名>
例:
下面的脚本中可以使用游标来删除表Employees中的姓名为张三的员工。
USEHrSystem;
GO
DECLARE MyEmpCursor CURSOR FOR
SELECT Emp_id FROM Employees
WHERE Emp_name = '张三';
OPEN MyEmpCursor;
FETCH FROM MyEmpCursor;
DELETE FROM Employees
WHERE CURRENT OF MyEmpCursor;
CLOSE MyEmpCursor;
DEAL LOCAT EMyEmpCursor;
GO
删除游标:
DEALLOCATE语句的功能是删除游标引用。当释放最后的游标引用时,组成该游标的数据结构由SQL Server释放。
DEALLOCATE语句的语法结构如下:
DEALLOCATE{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }
例:
如果增加DEAL LOCATE语句,则可以创建新的同名游标。脚本如下:
USEHrSystem
GO
DECLARE Employee_Cursor3 CURSOR
FOR SELECT * FROM Employees WHERE Sex = '男'
OPEN Employee_Cursor3
CLOSE Employee_Cursor3
DEAL LOCATE Employee_Cursor3
GO
DECLARE Employee_Cursor3 CURSOR
FOR SELECT Emp_Name, Title FROM Employees WHERE Sex='男'
GO
执行此脚本,可以看到在删除游标后,可以创建同名游标。
相关推荐
SQL SERVER 中游标的使用 SQL Server 中游标的定义和使用 在数据库开发过程中,当我们检索的数据只是一条记录时,我们所编写的事务语句代码往往使用 SELECT INSERT 语句。但是,我们常常会遇到这样情况,即从某一...
游标的基本操作包括以下步骤: 1. 声明游标(DECLARE):定义游标名称及关联的SQL查询语句。 2. 打开游标(OPEN):执行游标关联的SQL查询,返回结果集。 3. 提取数据(FETCH):从游标结果集中逐条提取数据,通常...
SQL Server 2000是微软公司开发的一款关系型数据库管理系统,它在2000年发布,是SQL Server 7.0的后继版本,提供了许多新特性和改进。游标(Cursor)是SQL Server 2000中用于处理数据的一种特殊数据类型,它允许对...
SQL Server 2000中的游标提供了一种能够从包含多条记录的结果集中每次提取一条记录的机制,使得对这些记录的操作更加灵活。 在数据库开发的过程中,游标能解决无法直接对单条记录进行操作的问题,尤其是在将SQL嵌入...
在 SQL 中游标的使用比较复杂,不能同时打开一个以上的游标,因为它只有一个全局变量@@Fast_statues 而且声明游标也麻烦,关闭游标时也不清除内存的;Oracle 中游标是以提高速度全部统一的单项游标,可以允许多用户...
本篇文章将深入探讨SQL Server中游标的使用,以及如何在存储过程中集成游标。 首先,我们需要了解游标的几个基本概念: 1. 游标的类型:包括静态、动态、键集和只进。静态游标在打开时加载所有数据,数据更改不会...
二、 SQL 中游标的定义? 答:declare cursorname CURSOR for select * from table 知识点:本题考察了SQL Server中的游标定义。游标是一种特殊的指针,可以用来遍历查询结果集。 三、 在 SQL Server 数据库中,...
17.3 sql server中游标的扩展 357 17.3.1 transact_sql扩展declare cursor语法 357 17.3.2 @@cursor_rows全局变量确定游标的行数 359 17.3.3 @@fetch_status全局变量检测fetch操作的状态 360 17.3.4 游标的关闭...
本实验旨在帮助学生理解并掌握 SQL Server 中游标的使用方法,通过设计和实现一个嵌套游标应用,以显示学生及其所修课程的信息。 实验的核心知识点包括以下几个方面: 1. **DECLARE CURSOR**:声明游标是定义游标...
sqlserver 和 orcal 中游标的应用技术
5.3 删除索引 5.3.1 删除索引的语句结构 5.3.2 使用SQL语句删除索引 5.4 视图的基础知识 5.4.1 视图概述 5.4.2 视图的优点与缺点 5.5 视图的基本操作 5.5.1 创建视图的基本语句结构 5.5.2 使用SQL语句创建视图 ...
基于PowerBuilder的SQLServer异地数据库备份与恢复 基于PowerBuilder的电网建设物资统计图形的实现方法 基于PowerBuilder的小型单位采购管理系统中权限管理设计与实现 基于PowerBuilder数据窗口的查询与筛选技术 ...
基于PowerBuilder的SQLServer异地数据库备份与恢复 基于PowerBuilder的电网建设物资统计图形的实现方法 基于PowerBuilder的小型单位采购管理系统中权限管理设计与实现 基于PowerBuilder数据窗口的查询与筛选技术 ...
【数据库实验六:游标的使用】的实验主要目标是让学生理解和掌握SQL中游标的使用方法。游标在数据库操作中起到关键作用,它允许我们逐条处理查询结果,而不是一次性处理所有数据。以下是对实验涉及知识点的详细说明...
- **知识点**: MySQL 中游标的使用限制。 - **解析**: 游标主要用于存储过程、存储函数和触发器中,但在交互式SQL查询中不能声明和使用游标。 - **重要性**: 明确游标的适用场景有助于正确编写SQL脚本。 #### 10. ...