zoukankan      html  css  js  c++  java
  • 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:查看当前会话中的所有游标属性
  • 相关阅读:
    慎用WSACleanup()
    WINAPI和APIENTRY是一样的
    LeetCode208:Implement Trie (Prefix Tree)
    C++学习笔记22,普通函数重载(1)
    代理server的理解(1):Windows环境下的代理server设置
    浅析android适配器adapter中的那些坑
    HTML网页之计算器代码
    Xcode 自己主动生成版本技术最佳实践
    封装RecyclerViewAdapter实现RecyclerView下拉刷新上拉载入很多其它
    Ubuntu下在Eclipse IDE for C/C++ Developers中怎样执行C语言的GTK程序?(已解决)
  • 原文地址:https://www.cnblogs.com/Jace06/p/9759345.html
Copyright © 2011-2022 走看看