T-SQL 语句(九)—— 游标

####

** T-SQL 语句(九)—— 游标**

一、游标简介
  1. 定位到结果集的某一行;
  2. 从当前结果集的位置搜索一行或部分行;
  3. 允许对结果集中的当前行进行数据修改。
    游标根据使用范围不同可以分为全局游标和局部游标,默认为全局游标。
二、实现游标的方法
  1. T-SQL 游标:主要用于 T-SQL、存储过程和触发器当中。T-SQL 游标的运算操作在服务器上完成,并由接受从客户端发送到服务器的 T-SQL 语句管理。
  2. API 游标:API 游标幼教应用程序编程接口服务器游标。API 游标也是在服务器上完成操作,每次客户端应用程序调用API游标时,OLEDB 或 ODBC 接口就将这些请求传输到服务器上,由服务器对 API 游标进行操作。
  3. 客户端游标:客户端游标由SQL Native Client ODBC 驱动程序和实现 ADO API 的 DLL 在客户端内部完成操作。当用客户端应用程序调用到客户端游标时,客户端通过 SQL Native Client ODBC 驱动程序或 ADO DLL 对储存在客户端高速缓存中的结果集执行游标操作。
三、游标的类型
  1. 静态游标:静态游标的完整的结果集在游标打开时建立在tempdb中,它不反映数据库中所做的更改,只按打开时的原样显示结果集。
  2. 动态游标:
  3. 只进游标:
  4. 由键值驱动的游标
四、使用游标
DECLARE Cursor_employee 
	CURSOR LOCAL -- 定义的是局部游标,使用 GLOBAL 定义全局游标
	FOR
	SELECT name,age FROM employee -- 定义游标
OPEN Cursor_employee -- 打开游标
DECLARE @name NVARCHAR(15)
DECLARE @age INT
FETCH NEXT FROM Cursor_employee INTO @name,@age
WHILE (@@FETCH_STATUS = 0)
BEGIN
	PRINT 'name:  ' + @name
	PRINT 'age:  ' + CAST(@age AS VARCHAR(3))
	PRINT ''
	FETCH NEXT FROM Cursor_employee INTO @name,@age
END
CLOSE Cursor_employee -- 关闭游标
DEALLOCATE Cursor_employee -- 删除游标,从内存中删除,释放系统资源

DECLARE @cursor_var STATIC CURSOR -- 定义游标变量,指定为静态游标,DIYNAMIC 游标 @@CURSOR_ROWS 总是-1
DECLARE @name NVARCHAR(20)
SET @cursor_var = CURSOR FOR SELECT * FROM employee
OPEN @cursor_var
FETCH NEXT FROM @cursor_var
WHERE(@@FETCH_STATUS = 0)
	BEGIN
		SELECT @name = name FROM CURRENT OF cursor_var -- 当前行
		PRINT @name
		FETCH NEXT FROM @cursor_var
	END
PRINT '打印静态游标总记录数 @@CURSOR_ROWS:'
PRINT @@CURSOR_ROWS
CLOSE @cursor_var
DEALLOCATE @cursor_var
五、查看游标状态
DECLARE Curosr_Employee CURSOR FOR SELECT * FROM employee
OPEN Curosr_Employee
DECLARE @cursor_var CURSOR
EXEC sp_describe_cursor @cursor_var 
	OUTPUT,N'global','Cursor_Employee' -- 查看游标属性
FETCH @cursor_var
CLOSE @cursor_var
DEALLOCATE @cursor_var
CLOSE Curosr_Employee
DEALLOCATE Cursor_Employee

-- sp_describe_cursor_columns:查看游标字段属性
-- sp_describe_cursor_tables:查看游标来源数据表
-- sp_cursor_list:查看当前会话中的所有游标属性
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值