关闭 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]]

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

    上一篇返回首页 下一篇

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

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    SQL汉字转换为拼音的函数

    windows 7系统无法运行Photoshop CS3的解决方法

    巧用MySQL加密函数对Web网站敏感数据进行保护

    MySQL基础知识简介

    Windows7和WinXP下如何实现不输密码自动登录系统的设置方法介绍

    windows 7系统ip地址冲突怎么办?windows 7系统IP地址冲突问题的

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

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