关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL语言 »SQL中游标的语法及应用(1)

    SQL中游标的语法及应用(1)

    2010-09-08 09:11:00 出处:ITJS
    分享

    游标是SQL数据库中不可或缺的部分,可以旋转储存在系统永久表中的数据行的副本,接下来的SQL server内容就将为您详解游标的使用,以及语法,供您参考学习。

    MS-SQL的游标是一种临时的数据库对象,既对可用来旋转储存在系统永久表中的数据行的副本,也可以指向储存在系统永久表中的数据行的指针。

    1)    定义游标语句 Declare <游标名> Cursor For

    4.使用系统过程管理游标

    6.游标和游标的优点

    游标是SQL数据库中不可或缺的部分,可以旋转储存在系统永久表中的数据行的副本,接下来的SQL server内容就将为您详解游标的使用,以及语法,供您参考学习。

    MS-SQL的游标是一种临时的数据库对象,既对可用来旋转储存在系统永久表中的数据行的副本,也可以指向储存在系统永久表中的数据行的指针。

    1)    定义游标语句 Declare <游标名> Cursor For

    在建立一个游标之后,便可利用系统过程对游标进行管理管理,游标的系统过程主要有以下几个:sp_cursor_list、sp_describe_cursor、 sp_describe_cursor_tables 、sp_describe_cursor_columns。

    1) sp_cursor_list   显示在当前作用域内的游标及其属性。其命令格式为:

    ">sp_cursor_list [ @cursor_return = ] cursor_variable_name OUTPUT,

    [ @cursor_scope = ] cursor_scope

    参数:

    ·         [@cursor_return =] cursor_variable_name OUTPUT:声明的游标变量的名称。cursor_variable_name 的数据类型为 cursor,没有默认值。游标是可滚动的、动态的只读游标。

    ·         [@cursor_scope =] cursor_scope:指定要报告的游标级别。cursor_scope 的数据类型为 int,没有默认值,可以是下列值中的一个。

    值描述

    1 报告所有本地游标。

    2 报告所有全局游标。

    3 报告本地游标和全局游标。

    提示:由于sp_cursor_list是一个含有游标类型变量@cursor_return,且有OUTPUT保留字的系统过程,游标变量@cursor_return中的结果集与pub_cur游标中的结果集是不同的。

    2) sp_describe_cursor 报告服务器游标的特性。

    sp_describe_cursor [ @cursor_return = ] output_cursor_variable OUTPUT

        { [ , [ @cursor_source = ] N''local''

            , [ @cursor_identity = ] N''local_cursor_name'' ]

                | [ , [ @cursor_source = ] N''global''

            , [ @cursor_identity = ] N''global_cursor_name'' ]

                | [ , [ @cursor_source = ] N''variable''

            , [ @cursor_identity = ] N''input_cursor_variable'' ]

        }

    参数:

    ·         [@cursor_return =] output_cursor_variable OUTPUT:声明游标变量的名称,该变量接收游标输出。output_cursor_variable 的数据类型为 cursor,没有默认值。调用 sp_describe_cursor 时,不能与任何游标相关联。返回的游标是可滚动的动态只读游标。

    ·         [@cursor_source =] { N''local'' | N''global'' | N''variable'' }:指定是使用本地游标的名称、全局游标的名称、还是游标变量的名称来指定当前正在对其进行报告的游标。参数是 nvarchar(30)。

    ·         [@cursor_identity =] N''local_cursor_name'']:由具有 LOCAL 关键字或默认设置为 LOCAL 的 DECLARE CURSOR 语句创建的游标的名称。local_cursor_name 的数据类型为 nvarchar(128)。

    ·         [@cursor_identity =] N''global_cursor_name'']:由具有 GLOBAL 关键字或默认设置为 GLOBAL 的 DECLARE CURSOR 语句创建的游标的名称。也可以是由 ODBC 应用程序打开然后通过调用 SQLSetCursorName 对游标命名的 API 服务器游标的名称。global_cursor_name 的数据类型为 nvarchar(128)。

    ·         [@cursor_identity =] N''input_cursor_variable'']:与开放游标相关联的游标变量的名称。input_cursor_variable 的数据类型为 nvarchar(128)。

    提示: sp_descride_cursor_tables和sp_describe_cursor_columms的命令格式与sp_describe_cursor的命令格式一样。

    5.游标种类

    MS SQL SERVER 支持三种类型的游

    标:Transact_SQL 游标,API 服务器游标和客户游标。

    1) Transact_SQL 游标Transact_SQL 游标是由DECLARE CURSOR 语法定义、主要用在Transact_SQL 脚本、存储过程和触发器中。Transact_SQL 游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL 语句或是批处理、存储过程、触发器中的Transact_SQL 进行管理。 Transact_SQL 游标不支持提取数据块或多行数据。

    2) API 游标 API 游标支持在OLE DB, ODBC 以及DB_library 中使用游标函数,主要用在服务器上。每一次客户端应用程序调用API 游标函数,MS SQL SEVER 的OLE DB 提供者、ODBC驱动器或DB_library 的动态链接库(DLL) 都会将这些客户请求传送给服务器以对API游标进行处理。

    3) 客户游标 客户游标主要是当在客户机上缓存结果集时才使用。在客户游标中,有一个缺省的结果集被用来在客户机上缓存整个结果集。客户游标仅支持静态游标而非动态游标。由于服务器游标并不支持所有的Transact-SQL 语句或批处理,所以客户游标常常仅被用作服务器游标的辅助。因为在一般情况下,服务器游标能支持绝大多数的游标操作。

    由于API 游标和Transact-SQL 游标使用在服务器端,所以被称为服务器游标,也被称为后台游标,而客户端游标被称为前台游标。在本章中我们主要讲述服务器(后台)游标。

    select count(id) from info

    select * from info

    --清除所有记录

    truncate table info

    declare @i int

    set @i=1

    while @i<1000000

    begin

    insert into info values(''Justin''+str(@i),''深圳''+str(@i))

    set @i=@i+1

    end

    6.游标和游标的优点

    在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条T_SQL 选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。假如曾经用 C 语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。

    我们知道关系数据库管理系统实质是面向集合的,在MS SQL中并没有一种描述表中单一记录的表达形式,除非使用where 子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。 SERVER

    由此可见,游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。

    以[master].[dbo].[spt_values] 这个表为例子

    ===

    declare @name nvarchar(35)

    declare @number int

    declare my_cursor cursor for         --定义游标cursor1

    select TOP 5 [name],[number] from [spt_values]               --使用游标的对象(跟据需要填入select文)

    open my_cursor                       --打开游标

    fetch next from my_cursor into @name,@number --将游标向下移1行,获取的数据放入之前定义的变量@id,@name中

    while(@@fetch_status=0)          --判断是否成功获取数据

    begin

    --update [spt_values] set [name]=@name+'1'

    --where [number]=@number+1           --进行相应处理(跟据需要填入SQL文)

    print @name

    print @number

    print '===='

    fetch next from my_cursor into @name,@number --将游标向下移1行

    end

    close my_cursor                   --关闭游标

    deallocate my_cursor

    =====================以下是基础

    blog.csdn.net/lejuo/archive/2008/11/12/3279340.aspx

    可百度 SQL游标语法及举例 进行更深入学习

    游标的定义:

    每一个游标必须有四个组成部分这四个关键部分必须符合下面的顺序;

    1.DECLARE 游标

    2.OPEN 游标

    3.从一个游标中FETCH 信息

    4.CLOSE 或DEALLOCATE 游标

    通常我们使用DECLARE 来声明一个游标声明一个游标主要包括以下主要内容:

    游标名字

    数据来源(表和列)

    选取条件

    属性(仅读或可修改)

    其语法格式如下:

    DECLARE cursor_name [INSENSITIVE] [SCROLL] CURSOR

    FOR select_statement

    [FOR {READ ONLY | UPDATE [OF column_name [,...n]]}]

    其中:

    cursor_name

    指游标的名字。

    INSENSITIVE

    表明MS SQL SERVER 会将游标定义所选取出来的数据记录存放在一临时表内(建立在tempdb 数据库下)。对该游标的读取操作皆由临时表来应答。因此,对基本表的修改并不影响游标提取的数据,即游标不会随着基本表内容的改变而改变,同时也无法通过

    游标来更新基本表。假如不使用该保留字,那么对基本表的更新、删除都会反映到游标中。

    另外应该指出,当遇到以下情况发生时,游标将自动设定INSENSITIVE 选项。

    在SELECT 语句中使用DISTINCT、 GROUP BY、 HAVING UNION 语句;

    使用OUTER JOIN;

    所选取的任意表没有索引;

    将实数值当作选取的列。

    SCROLL

    表 明所有的提取操作(如FIRST、 LAST、 PRIOR、 NEXT、 RELATIVE、 ABSOLUTE)都可用。假如不使用该保留字,那么只能进行NEXT 提取操作。由此可见,SCROLL 极大地增加了提取数据的灵活性,可以随意读取结果集中的任一行数据记录,而不必关闭再

    重开游标。

    select_statement

    是定义结果集的SELECT 语句。应该注意的是,在游标中不能使用COMPUTE、COMPU- TE BY、 FOR BROWSE、 INTO 语句。

    READ ONLY

    表明不允许游标内的数据被更新尽管在缺省状态下游标是允许更新的。而且在UPDATE或DELETE 语句的WHERE CURRENT OF 子句中,不允许对该游标进行引用。

    UPDATE [OF column_name[,…n]]

    定义在游标中可被修改的列,假如不指出要更新的列,那么所有的列都将被更新。当游标被成功创。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    如何从 Windows 11 中完全删除/卸载 OneNote?无解!

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    IT头条

    华为Pura80系列新机预热,余承东力赞其复杂光线下的视频拍摄实力

    01:28

    阿里千问3开源首战告捷:全球下载破千万,国产AI模型崛起新高度!

    01:22

    DeepSeek R1小版本试升级:网友实测编程能力已达到国际一线水平

    23:15

    NVIDIA 与 Dell 合作,大规模交付 Blackwell AI 系统

    20:52

    Cerebras 以最快的 Llama 4 Maverick 性能引领 LLM 推理竞赛

    20:51

    技术热点

    PHP中的随机性——你觉得自己幸运吗?

    搞定Ubuntu Linux下WPA无线上网

    Java使用内存映射实现大文件的上传

    MySQL安全性指南

    MySQL两项性能的基本测试浅谈

    教您使用UniqueIdentifier选取SQL Server主键

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。