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:查看当前会话中的所有游标属性
原文地址:https://www.cnblogs.com/Jace06/p/9759345.html